二叉树前序、中序、后序遍历

来源:互联网 发布:完全卸载sqlserver 编辑:程序博客网 时间:2024/06/06 20:53


三种遍历

遍历即将树的所有结点访问且仅访问一次。按照根节点位置的不同分为前序遍历,中序遍历,后序遍历。

前序遍历:根节点->左子树->右子树
中序遍历:左子树->根节点->右子树
后序遍历:左子树->右子树->根节点


前序遍历:abdefgc
中序遍历:debgfac
后序遍历:edgfbca


递归实现:

前序递归实现:

void preorder(bintree t){    if(t){        printf("%c ",t->data);        preorder(t->lchild);        preorder(t->rchild);    }}
中序和后序遍历只是把打印的位置改变下。



非递归实现

非递归算法参考:http://blog.csdn.net/zhangxiangdavaid/article/details/37115355

中序:

//中序遍历void InOrderWithoutRecursion2(BTNode* root){//空树if (root == NULL)return;//树非空BTNode* p = root;stack<BTNode*> s;while (!s.empty() || p){if (p){s.push(p);p = p->lchild;}else{p = s.top();s.pop();cout << setw(4) << p->data;p = p->rchild;}}}

前序:

//前序遍历void PreOrderWithoutRecursion2(BTNode* root){if (root == NULL)return;BTNode* p = root;stack<BTNode*> s;while (!s.empty() || p){if (p){cout << setw(4) << p->data;s.push(p);p = p->lchild;}else{p = s.top();s.pop();p = p->rchild;}}cout << endl;}

查找、统计个数、比较、求深度的递归实现   

参考:http://blog.csdn.net/fansongy/article/details/6798278/

原创粉丝点击