二叉树的遍历 非递归 C实现——中序遍历篇

来源:互联网 发布:游戏编程入门自学 编辑:程序博客网 时间:2024/05/23 19:01

同上文法一方法类似实现:

原理:中序遍历-左根右

循环每次把左孩子入栈,直到叶节点;沿着栈里弹出的顺序一次访问右孩子。


#include <iostream>#include "stack"using namespace std;struct TNode{TNode *left;TNode *right;int data;};TNode *Root;void Visit(TNode *cur){cout<<cur->data<<endl;}stack<TNode*> ST2;void midOrder(TNode* root){while (!ST2.empty()||root!=NULL){if(root!=NULL){ST2.push(root);root=root->left;}else{root=ST2.top();ST2.pop();Visit(root);root=root->right;}}}void InitTree(TNode *root){root->data=1;TNode* tree[10];for (int i=0;i<7;i++){tree[i]=(TNode*) malloc(sizeof(TNode*));tree[i]->data=i;tree[i]->left=tree[i]->right=NULL;}tree[4]->right=tree[6];tree[1]->left=tree[3];tree[1]->right=tree[4];tree[2]->left=tree[5];tree[0]->left=tree[1];tree[0]->right=tree[2];Root=tree[0];}void main(){Root=(TNode*) malloc(sizeof(TNode*));InitTree(Root);//preOrder1(Root);midOrder(Root);}


原创粉丝点击