Binary Tree Inorder Traversal

原创 2016年06月02日 10:20:08
Given a binary tree, return the inorder traversal of its nodes' values.

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

return [1,3,2].

思路:二叉树中序遍历。如果节点不为NULL的话,先访问这个节点的left节点,再访问当前节点,最后访问right节点。

方法一:递归的方式来解决

/**
 * 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;
        if(!root)
            return res;
        inorder(root,res);
        return res;
    }
    void inorder(TreeNode*root,vector<int>&res)
    {
        if(root)
        {
            inorder(root->left,res);
            res.push_back(root->val);
            inorder(root->right,res);
        }
    }
    
};
方法二:使用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) {
        stack<TreeNode*>stk;
        vector<int>res;
        TreeNode *proot=root;
        while(proot||!stk.empty())
        {
            if(proot)
            {
                stk.push(proot);
                proot=proot->left;
            }
            else
            {
                proot=stk.top();
                res.push_back(proot->val);
                stk.pop();
                proot=proot->right;
            }
        }
        return res;
    }
};

方法三:使用morris遍历的方式。可以达到空间复杂度o(1).

/**
 * 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) {
        //morris
        vector<int>res;
        TreeNode *cur=root,*pre=NULL;
        while(cur)
        {
            if(cur->left==NULL)//如果当前节点的左子树为空,则输出当前节点,当前节点设置为节点的右子树的根节点
            {
                res.push_back(cur->val);
                cur=cur->right;
            }
            else
            {
                pre=cur->left;
                while(pre->right&&pre->right!=cur)
                    pre=pre->right;
                //pre 为当前节点在中序遍历下的前驱节点
                if(pre->right==NULL)
                {
                    pre->right=cur;
                    cur=cur->left;
                }
                else
                {
                    pre->right=NULL;
                    res.push_back(cur->val);
                    cur=cur->right;
                }
            }
        }
        return res;
    }
};




版权声明:本文为博主原创文章,未经博主允许不得转载。

[leetcode]94. Binary Tree Inorder Traversal@Java解题报告

https://leetcode.com/problems/binary-tree-inorder-traversal/description/ Given a ...

leetcode No105. Construct Binary Tree from Preorder and Inorder Traversal

Question: Given preorder and inorder traversal of a tree, construct the binary tree. 根据树的前序遍历和中序遍历...

Binary Tree Inorder Traversal -- leetcode

Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binar...

【LeetCode】Construct Binary Tree from Inorder and Postorder Traversal

Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume t...

【leetcode】Construct Binary Tree from Preorder and Inorder Traversal

问题: 给定二叉树的前序和中序遍历,重构这课二叉树. 分析: 前序、中序、后序都是针对于根结点而言,所以又叫作先根、中根、后根(当然不是高跟)。 前序:根  左 右 中序:左  根 右 对二叉树,我们...

leetCode 94.Binary Tree Inorder Traversal(二叉树中序遍历) 解题思路和方法

Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary t...

LeetCode题解-105-Construct Binary Tree from Preorder and Inorder Traversal

原题 Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume ...

leetcode(十二)Binary Tree Inorder Traversal

copyright:leetcode Given a binary tree, return the inorder traversal of its nodes' values. F...

LeetCode OJ 106. Construct Binary Tree from Inorder and Postorder Traversal

LeetCode OJ 106. Construct Binary Tree from Inorder and Postorder TraversalDescriptionGiven inorder ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Binary Tree Inorder Traversal
举报原因:
原因补充:

(最多只允许输入30个字)