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

来源:互联网 发布:js event button 编辑:程序博客网 时间:2024/05/23 00:56

二叉树的前序遍历

  1. 题目

    给出一棵二叉树,返回其节点值的前序遍历。

  2. 样例

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

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

  3. 挑战

    你能使用非递归实现么?

  4. 题解

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: Preorder in ArrayList which contains node values.     */    private ArrayList<Integer> result = new ArrayList<Integer>();    public ArrayList<Integer> preorderTraversal(TreeNode root) {        if (root == null)        {            return result;        }        result.add(root.val);        preorderTraversal(root.left);        preorderTraversal(root.right);        return result;    }}

2.非递归法

前序遍历的规则是从根节点开始,先遍历左子节点再遍历右子节点。

遍历规则:
1.对于任一结点P,若其左子节点不为null,记录该结点后则将P入栈,并将P赋值为P的左子节点。
2.对于任一结点P,若其左子节点为null,则将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: Preorder in ArrayList which contains node values.     */    public ArrayList<Integer> preorderTraversal(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)            {                result.add(p.val);                stack.push(p);                p = p.left;            }            if (!stack.empty())            {                p = stack.peek();                stack.pop();                p = p.right;            }        }        return result;    }}

Last Update 2016.8.29

0 0
原创粉丝点击