[置顶] 【LeetCode】94. Binary Tree Inorder Traversal 解题报告

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51477967

Subject

出处:https://leetcode.com/problems/binary-tree-inorder-traversal/

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].

Explain

该题目的意思就是中序遍历二叉树,保存结点值到list集合中返回。

Solution

递归方式 + 非递归方式

solution 1

递归方式

    public List<Integer> list = new ArrayList<Integer>();

    /** * 递归方式 <br /> * 1ms * * @param root * @return */
    public List<Integer> inorderTraversal(TreeNode root) {
        inOrder(root);
        return list;
    }

    /** * 递归方式 * * @param node */
    public void inOrder(TreeNode node) {
        if (node == null) {
            return;
        }
        if (node.left != null) {
            inOrder(node.left);
        }
        list.add(node.val);
        if (node.right != null) {
            inOrder(node.right);
        }
    }

LeetCode平台 Run Time 是 1ms

solution 2

非递归方式

    /** * 非递归方式<br /> * 2ms * * @param root * @return */
    public List<Integer> inorderTraversal2(TreeNode root) {
        if (root == null) {
            return list;
        }
        Stack<TreeNode> stack = new Stack<>();
        TreeNode tempNode = root;
        stack.push(tempNode);
        while (!stack.isEmpty()) {
            while ((tempNode = stack.peek()) != null) {
                tempNode = tempNode.left;
                stack.push(tempNode);
            }
            //
            stack.pop();
            //
            if (!stack.isEmpty()) {
                tempNode = stack.pop();
                list.add(tempNode.val);
                stack.push(tempNode.right);
            }
        }
        return list;
    }

LeetCode平台 Run Time 是 2ms

so easy~~

你可能感兴趣的:(LeetCode,tree,binary,traversal,Inorder)