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

原创 2016年08月29日 12:51:25

二叉树的前序遍历

  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

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

相关文章推荐

73.Construct Binary Tree from Preorder and Inorder Traversal-前序遍历和中序遍历树构造二叉树(中等题)

前序遍历和中序遍历树构造二叉树 题目根据前序遍历和中序遍历树构造二叉树.注意事项 你可以假设树中不存在相同数值的节点 样例给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: ...

binary-tree-preorder-traversal(二叉树的前序遍历)

二叉树的前序遍历的递归实现: public static ArrayList preorderTraversal(TreeNode root) { if (root == null) ret...

LeetCode 144 Binary Tree Preorder Traversal(二叉树的前序遍历)+(二叉树、迭代)

翻译给定一个二叉树,返回其前序遍历的节点的值。例如: 给定二叉树为 {1,#, 2, 3} 1 \ 2 / 3 返回 [1, 2, 3]备注:用递归是微不足道的,...
  • NoMasp
  • NoMasp
  • 2016年03月19日 16:15
  • 2944

Leetcode 144 - Binary Tree Preorder Traversal(二叉树前序遍历)

题意求二叉树的前序遍历。 思路分为递归实现和利用栈模拟递归实现。 递归实现的代码和思路很简单就不详细说了。关键是我们如何利用栈非递归的去实现。 关键思路就是:对于当前节点,我们递归的去对它的左子...
  • Lzedo
  • Lzedo
  • 2017年03月12日 14:43
  • 112

[LeetCode]144. Binary Tree Preorder Traversal--二叉树前序遍历

144. Binary Tree Preorder Traversal Given a binary tree, return the preorder traversal of its n...

Leetcode: Binary Tree Preorder Traversal(二叉树前序遍历)

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

LeetCode 331. Verify Preorder Serialization of a Binary Tree(校验二叉树的前序遍历序列化)

原题网址:https://leetcode.com/problems/verify-preorder-serialization-of-a-binary-tree/ One way to seri...
  • jmspan
  • jmspan
  • 2016年04月28日 07:36
  • 367

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

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

Binary Tree Preorder Traversal--二叉树的先序遍历

原题: Given a binary tree, return the preorder traversal of its nodes' values. =>给出一个二叉树,返回先序遍历的所有的节点值...

[leetcode]Construct Binary Tree from Preorder and Inorder Traversal(根据前序、中序遍历确定一棵二叉树 C语言)

Construct Binary Tree from Preorder and Inorder Traversal Given preorder and inorder traversal of a...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:66.Binary Tree Preorder Traversal-二叉树的前序遍历(容易题)
举报原因:
原因补充:

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