1. 程式人生 > >二叉樹遍歷演算法(遞迴實現先序中序和後續遍歷)(非遞迴實現中序和先續)

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

二叉樹遍歷

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

遞迴實現

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;
}