二叉树遍历算法(递归实现先序中序和后续遍历)(非递归实现中序和先续)

二叉树遍历

这两天抓紧把二叉树遍历复习了一遍,递归实现还是一如既往地简洁,迭代版本写了好久还是只实现了先序和中序,后续一直没搞明白,有空了再更新。

递归实现

void RecursionBackTree(TreeNode * root) {
     if (root) {
         //先续遍历
         //cout << root->val << " ";
         RecursionBackTree(root->left);
         //中续遍历
         //cout << root->val << " ";
         RecursionBackTree(root->right);
         //后续遍历
         cout << root->val << " ";
     }
 }

迭代版本

先序遍历

 //Preorder
 void IterateFirstTraverse(TreeNode* root) {
     if (!root) return;
     stack<TreeNode*>  st;
     while (true) {
         while (root) {
             cout << root->val<<" ";
             st.push(root->right);
             root = root->left;
         }
         if (!st.empty()) {
             root = st.top();
             st.pop();
         }
         else {
             break;
         }
     }
     cout << endl;
 } 

中序遍历

 void IterateTraverse(TreeNode* root) {
     if (!root) return;
     stack<TreeNode* > st;
     //st.push(root);
     //root = root->left;
     while (true) {
         while (root) { st.push(root); root = root->left; }
         if (st.empty()) break;
         root = st.top();
         st.pop();
         cout << root->val<<" ";
         root = root->right;
     }
     cout << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值