zoukankan      html  css  js  c++  java
  • Binary Tree Traversal

    1、Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values.

    For example:
    Given binary tree {1,#,2,3},

       1
        
         2
        /
       3

    return [1,2,3].

    Note: Recursive solution is trivial, could you do it iteratively?

    解题:前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。这里依然使用栈实现。先访问根结点,再将右结点、左结点压到栈中,根据栈先进后出的特性,会先遍历左子树,再遍历右子树。

    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<int> preorderTraversal(TreeNode *root) {
            vector<int> ans;
            stack<TreeNode*> que;
            TreeNode *tmp;
            if(root != NULL){
                
                que.push(root);
                while(!que.empty())
                {
                    tmp = que.top();
                    que.pop();
                    ans.push_back(tmp->val);
                    
                    if(tmp->right != NULL)
                        que.push(tmp->right);
                    if(tmp->left != NULL)
                        que.push(tmp->left);
                }
            }
            return ans;
        }
    };

     2、 Inorder Traversal

    For example:
    Given binary tree {1,#,2,3},

       1
        
         2
        /
       3

    return [1,3,2].

    解题:中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。这里依然使用栈实现。

    /**
     * Definition for binary tree
     * 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> ans;
            stack<TreeNode*> stk;
            TreeNode* tmp = root;
            while(tmp != NULL || !stk.empty())
            {
                while(tmp != NULL)
                {
                    stk.push(tmp);
                    tmp = tmp->left;
                }
                if(!stk.empty())
                {
                    tmp = stk.top();
                    ans.push_back(tmp->val);
                    stk.pop();
                    tmp = tmp->right;
                }
            }
            return ans;
        }
    };

    3、Postorder Traversal

    For example:
    Given binary tree {1,#,2,3},

       1
        
         2
        /
       3

    return [3,2,1].

    解题:后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点。算法处理过程:先迭代并压栈至左子树最左结点,取出栈顶元素,判断是否具有右儿子(或者其右儿子刚刚被访问),如果条件为真,便访问该结点,否则对其右儿子进行后序遍历。

    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<int> postorderTraversal(TreeNode *root) {
            vector<int> ans;
            stack<TreeNode*> stk; 
            TreeNode *pre,*tmp = root;
            while(tmp != NULL || !stk.empty()){
                while(tmp != NULL) {
                    stk.push(tmp);
                    tmp = tmp->left;
                }
                tmp = stk.top();
                if(tmp->right == NULL || tmp->right == pre){
                    ans.push_back(tmp->val);
                    stk.pop();
                    pre = tmp;
                    tmp = NULL;
                }
                else {
                    tmp = tmp->right;
                }
            }
            return ans;
        }
    };

     

  • 相关阅读:
    Python3-shutil模块-高级文件操作
    Python3-sys模块-解释器相关参数与函数
    Python3-os模块-操作系统的各种接口
    Python3-算法-冒泡排序
    Python3-re模块-正则表达式
    Python3-算法-递归
    Python3-设计模式-迭代器模式
    Python3-设计模式-装饰器模式
    PTA 7-28 搜索树判断(镜像二叉搜索树的后序遍历)
    PTA 7-26 Windows消息队列(小顶堆+输入优化)
  • 原文地址:https://www.cnblogs.com/chenbjin/p/3705192.html
Copyright © 2011-2022 走看看