leetcode 144. Binary Tree Preorder Traversal

来源:互联网 发布:数车的caxa编程 编辑:程序博客网 时间:2024/06/03 19:35

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

Note: Recursive solution is trivial, could you do it iteratively?

我用了递归和迭代两种方法来做:

package leetcode;import java.util.ArrayList;import java.util.List;import java.util.Stack;public class Binary_Tree_Preorder_Traversal_144 {public List<Integer> preorderTraversal1(TreeNode root) {List<Integer> list=new ArrayList<Integer>();DFS(list,root);return list;}public void DFS(List<Integer> list,TreeNode node){if(node==null){return;}list.add(node.val);DFS(list,node.left);DFS(list,node.right);}public List<Integer> preorderTraversal2(TreeNode root) {List<Integer> list=new ArrayList<Integer>();if(root==null){return list;}Stack<TreeNode> stack=new Stack<TreeNode>();stack.push(root);while(!stack.isEmpty()){TreeNode node=stack.pop();list.add(node.val);if(node.right!=null){stack.push(node.right);}if(node.left!=null){stack.push(node.left);}}return list;}public static void main(String[] args) {// TODO Auto-generated method stubBinary_Tree_Preorder_Traversal_144 b=new Binary_Tree_Preorder_Traversal_144();TreeNode root=new TreeNode(1);root.right=new TreeNode(2);root.right.left=new TreeNode(3);List<Integer> list=b.preorderTraversal2(root);for(Integer i:list){System.out.print(i+" ");}}}
大神也用了迭代,不过思路有所不同:栈中只存储 right children .

public List<Integer> preorderTraversal(TreeNode node) {List<Integer> list = new LinkedList<Integer>();Stack<TreeNode> rights = new Stack<TreeNode>();while(node != null) {list.add(node.val);if (node.right != null) {rights.push(node.right);}node = node.left;if (node == null && !rights.isEmpty()) {node = rights.pop();}}    return list;}

原创粉丝点击