Binary Tree Traversal (C++)

之前的版本太多,这里总结一下三种非递归遍历(C++)

preorder

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> result;
        stack<TreeNode *> st;
        TreeNode * p = root;
        while(!st.empty() || p) {
            if(p != NULL) {
                st.push(p);
                result.push_back(p->val);
                p = p->left;
            } else {
                TreeNode * top = st.top();
                st.pop();
                p = top->right;
            }
        }
        return result;
    }
};

inorder

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> result;
        stack<TreeNode *> st;
        TreeNode * p = root;
        while(!st.empty() || p) {
            if(p != NULL) {
                st.push(p);
                p = p->left;
            } else {
                TreeNode * top = st.top();
                st.pop();
                result.push_back(top->val);
                p = top->right;
            }
        }
        return result;
    }
};

postorder

class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int> result;
        stack<TreeNode *> st;
        TreeNode * p = root;
        TreeNode * pre = NULL;
        while(!st.empty() || p) {
            if(p != NULL) {
                st.push(p);
                p = p->left;
            } else {
                TreeNode * top = st.top();
                if(top->right == NULL || top->right == pre) {
                    st.pop();
                    pre = top;
                    result.push_back(top->val);
                } else {
                    p = top->right;
                }
            }
        }
        return result;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,793评论 0 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,281评论 19 139
  • 总结类型: 完全子树(#222) BST(左右子树值的性质,注意不仅要满足parent-child relatio...
    __小赤佬__阅读 733评论 0 0
  • **Question: Given inorder and postorder traversal of a tr...
    Richardo92阅读 531评论 0 1
  • 1.函数参数的默认值 (1).基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。
    赵然228阅读 758评论 0 0