二叉樹遍歷算法(遞歸實現先序中序和後續遍歷)(非遞歸實現中序和先續)

二叉樹遍歷

這兩天抓緊把二叉樹遍歷複習了一遍,遞歸實現還是一如既往地簡潔,迭代版本寫了好久還是隻實現了先序和中序,後續一直沒搞明白,有空了再更新。

遞歸實現

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章