小言_互联网的博客

C语言数据结构-树和二叉树-先序遍历-已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法

231人阅读  评论(0)

先序遍历

已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法:

void pre_order(BiTree root);

在遍历过程中,pre_order函数需要调用 visit_node 函数来实现对结点的访问,该函数声明如下:

void visit_node(BiTNode *node);

二叉树的相关定义如下:


  
  1. typedef int DataType;
  2. typedef struct Node{
  3. DataType data;
  4. struct Node* left;
  5. struct Node* right;
  6. }BiTNode, *BiTree;

遍历所使用栈的相关操作如下:


  
  1. #define Stack_Size 50
  2. typedef BiTNode* ElemType;
  3. typedef struct{
  4. ElemType elem[Stack_Size];
  5. int top;
  6. }Stack;
  7. void init_stack(Stack *S); // 初始化栈
  8. bool push(Stack* S, ElemType x); //x 入栈
  9. bool pop(Stack* S, ElemType *px); //出栈,元素保存到px所指的单元,函数返回true,栈为空时返回 false
  10. bool top(Stack* S, ElemType *px); //获取栈顶元素,将其保存到px所指的单元,函数返回true,栈满时返回 false
  11. bool is_empty(Stack* S); // 栈为空时返回 true,否则返回 false

提供代码


  
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "bitree.h" //请不要删除,否则检查不通过
  4. void pre_order(BiTree root){
  5. }

参考代码


  
  1. #include "bitree.h" //请不要删除,否则检查不通过
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. void pre_order(BiTree root)
  5. {
  6. Stack S[Stack_Size];
  7. BiTree T = root;
  8. init_stack(S);
  9. while (T || !is_empty(S))
  10. {
  11. while (T)
  12. {
  13. visit_node(T);
  14. push(S, T);
  15. T = T->left;
  16. }
  17. pop(S, &T);
  18. T = T->right;
  19. }
  20. }

 

 

 


转载:https://blog.csdn.net/aiqq136/article/details/115738766
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场