67.Binary Tree Inorder Traversal-二叉树的中序遍历(容易题)

原创 2016年08月29日 15:30:08

二叉树的中序遍历

  1. 题目

    给出一棵二叉树,返回其中序遍历

  2. 样例

    给出二叉树 {1,#,2,3},

    1
    \
    2
    /
    3
    返回 [1,3,2].

  3. 题解

1.递归法

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param root: The root of binary tree.
     * @return: Inorder in ArrayList which contains node values.
     */
    private ArrayList<Integer> result = new ArrayList<Integer>();

    public ArrayList<Integer> inorderTraversal(TreeNode root) {
        if (root == null)
        {
            return result;
        }
        inorderTraversal(root.left);
        result.add(root.val);
        inorderTraversal(root.right);
        return result;
    }
}

2.非递归法
中序遍历的规则是对于任一结点,优先访问其左子节点,而左子节点又可以看做根结点,然后继续访问其左子节点,直到左子节点为空为止,然后以同样的规则访问其右子节点。

遍历规则:
1.对于任一结点P,若左子节点不为null,则将P入栈并将赋值为P的左子节点。
2.对于任一结点P,若其左子节点为null,则将P赋值为取栈顶节点后出栈,记录该结点后将P赋值为P的右子节点,直到P和栈都为null为止。

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param root: The root of binary tree.
     * @return: Inorder in ArrayList which contains node values.
     */
    public ArrayList<Integer> inorderTraversal(TreeNode root) {
        ArrayList<Integer> result = new ArrayList<Integer>();
        if (root == null)
        {
            return result;
        }
        Stack<TreeNode> stack = new Stack<>();
        TreeNode p = root;
        while (p!=null || !stack.empty())
        {
            while (p!=null)
            {
                stack.push(p);
                p=p.left;
            }
            if (!stack.empty())
            {
                p = stack.peek();
                result.add(p.val);
                stack.pop();
                p = p.right;
            }
        }

        return result;
    }
}

Last Update 2016.8.29

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

相关文章推荐

67.Binary Tree Inorder Traversal-二叉树的中序遍历(容易题)

二叉树的中序遍历 题目给出一棵二叉树,返回其中序遍历 样例给出二叉树 {1,#,2,3},1 \ 2 / 3 返回 [1,3,2]. 题解 1.递归法/** * Definition ...

68.Binary Tree Postorder Traversal-二叉树的后序遍历(容易题)

二叉树的后序遍历 题目给出一棵二叉树,返回其节点值的后序遍历。 样例给出一棵二叉树 {1,#,2,3},1 \ 2 / 3 返回 [3,2,1] 挑战你能使用非递归实现么? 题解 1.递...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

66.Binary Tree Preorder Traversal-二叉树的前序遍历(容易题)

二叉树的前序遍历 题目给出一棵二叉树,返回其节点值的前序遍历。 样例给出一棵二叉树 {1,#,2,3},1   \    2   / 3 返回 [1,2,3]. 挑战你能使用非递...

LeetCode 94. Binary Tree Inorder Traversal(二叉树的中序遍历)

原题网址:https://leetcode.com/problems/binary-tree-inorder-traversal/ Given a binary tree, return the ...

LeetCode | Binary Tree Inorder Traversal(二叉树的中序遍历)

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

二叉树的中序遍历 Binary Tree Inorder Traversal

方法:二叉树的先序遍历形式有递归和非递归两种。 递归方式的实现: class Solution { public: vector inorderTraversal(TreeNode *roo...

LeetCode Binary Tree Inorder Traversal 中序遍历二叉树

会如何保存这个Vector中间数据,就能解决这道题目了。 2014-1-9 update iterative的解法,我使用一个标志flag,判断是否遍历过的节点: 理解了树的操作就好办了

Leetcode: Binary Tree Inorder Traversal(二叉树中序遍历)

题目: Given a binary tree, return the inorder traversal of its nodes’ values.For example: Given bina...

Leetcode 94:Binary Tree Inorder Traversal (二叉树中序遍历,非递归)

94. Binary Tree Inorder Traversal 提交地址: https://leetcode.com/problems/binary-tree-inorder-traversal/...

【leetcode 中序遍历】Binary Tree Inorder Traversal

1、题目 2、分析 3、代码
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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