zoukankan      html  css  js  c++  java
  • 94.Binary Tree Inorder Traversal

    思路:
    • 递归。
    
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<int> inorderTraversal(TreeNode* root) {
            vector<int> res;
            dfs(res,root);
            return res;
        }
        void dfs(vector<int>& res,TreeNode* root){
            if(root){
                dfs(res,root->left);
                res.push_back(root->val);
                dfs(res,root->right);
            }
        }
    };
    
    • 利用栈进行遍历。对于中序遍历,首先遍历左子树, 然后是根节点,最后才是右子树,所以我们需要用stack记录每次遍历的根节点, 当左子树遍历完成之后,从stack弹出根节点,得到其右子树,开始新的遍历。(参考的一个文档,链接找不到了。。)
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<int> inorderTraversal(TreeNode* root) {
            vector<int> res;
            stack<TreeNode*> tmp;
            TreeNode* p = root;
            while(p || !tmp.empty()){
                while(p){
                    tmp.push(p);
                    p = p->left;
                }
                if(!tmp.empty()){
                    p = tmp.top();
                    tmp.pop();
                    res.push_back(p->val);
                    p = p->right;
                }
            }
            return res;
        }
    };
    
    • 直接遍历,以后写。。
  • 相关阅读:
    [APIO2018]Circle selection
    [CF1025D]Recovering BST
    [CF1023D]Array Restoration
    [POI2006]PRO-Professor Szu
    [CF888G]Xor-MST
    可持久化并查集小结
    [国家队集训]最短路
    [POI2012]FES-Festival
    [SDOI2010]所驼门王的宝藏
    洛谷 P1025 & [NOIP2001提高组] 数的划分(搜索剪枝)
  • 原文地址:https://www.cnblogs.com/UniMilky/p/7017796.html
Copyright © 2011-2022 走看看