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

     

  • 相关阅读:
    更改Tomcat startup.bat启动窗口名称
    java 启用新线程异步调用
    [转]jquery中使用event.target的几点
    Linux开启相关端口及查看已开启端口
    【转】eclipse插件:OpenExplorer快速打开文件目录
    bootbox.js [v4.2.0]设置确认框 按钮语言为中文
    【转】eclipse使用git提交到osc
    使用RMAN恢复数据库
    来一篇最全的自动化运维部署文档
    (转)linux 内存管理——内核的shmall 和shmmax 参数
  • 原文地址:https://www.cnblogs.com/chenbjin/p/3705192.html
Copyright © 2011-2022 走看看