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

二叉树的前序遍历

1. 题目

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

2. 样例

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

1
\
2
/
3
返回 [1,2,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;
}
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)
{
stack.push(p);
p = p.left;
}
if (!stack.empty())
{
p = stack.peek();
stack.pop();
p = p.right;
}
}

return result;
}
}

Last Update 2016.8.29

• 本文已收录于以下专栏：

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

• NoMasp
• 2016-03-19 16:15
• 2673

Leetcode 144 - Binary Tree Preorder Traversal（二叉树前序遍历）

• Lzedo
• 2017-03-12 14:43
• 90

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

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

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

举报原因： 您举报文章：深度学习：神经网络中的前向传播和反向传播算法推导 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)