Given a binary tree, return the preorder traversal of its nodes’ values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [1,2,3].
思路:需要借助栈,由于是前序遍历二叉树,肯定是左子树先于右子树被访问,由于栈是先入后出的,再弹出一个结点是先放入该节点的右子树,然后放入结点的左子树。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
Stack<TreeNode> stack=new Stack<TreeNode>();
List<Integer> result=new ArrayList<Integer>();
if(root==null) return result;
stack.push(root);
while(!stack.empty())
{
TreeNode node=stack.pop();
result.add(node.val);
if(node.right!=null) stack.push(node.right);
if(node.left!=null) stack.push(node.left);
}
return result;
}
}
递归:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result=new ArrayList<Integer>();
preorder(root,result);
return result;
}
void preorder(TreeNode root,List<Integer> result)
{
if(root==null) return;
else result.add(root.val);
preorder(root.left,result);
preorder(root.right,result);
}
}