首页 > 代码库 > [leecode]Binary Tree Preorder Traversal
[leecode]Binary Tree Preorder Traversal
Binary Tree Preorder Traversal
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?
算法思路:
思路1:递归版
代码如下:
1 /** 2 * Definition for binary tree 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */10 public class Solution {11 List<Integer> res = new ArrayList<Integer>();12 public List<Integer> preorderTraversal(TreeNode root) {13 if(root == null) return res;14 res.add(root.val);15 if(root.left != null) preorderTraversal(root.left);16 if(root.right != null) preorderTraversal(root.right);17 return res;18 }19 }
2. 非递归实现:
借助栈,每一次弹栈处理栈顶元素之后都将右节点、左节点分别压栈,大家画个图就明白了
代码如下:
1 public class Solution { 2 public List<Integer> preorderTraversal(TreeNode root) { 3 List<Integer> res = new ArrayList<Integer>(); 4 if(root == null) return res; 5 Stack<TreeNode> stack = new Stack<TreeNode>(); 6 stack.push(root); 7 while(!stack.isEmpty()){ 8 TreeNode node = stack.pop(); 9 res.add(node.val);10 if(node.right != null){11 stack.push(node.right);12 }13 if(node.left != null){14 stack.push(node.left);15 }16 }17 return res;18 }19 }
[leecode]Binary Tree Preorder Traversal
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。