Binary Tree Preorder Traversal (Java)
来源:互联网 发布:淘宝免费货源怎么找 编辑:程序博客网 时间:2024/06/15 13:46
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?
这道题是让用非递归方法解决前序遍历问题
Source 递归
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution {List<Integer> st = new ArrayList<Integer>(); public List<Integer> preorderTraversal(TreeNode root) { if(root == null) return st; st.add(root.val); if(root.left != null) preorderTraversal(root.left); if(root.right != null) preorderTraversal(root.right); return st; }}
Test
public static void main(String[] args){ TreeNode a = new TreeNode(1); a.left = new TreeNode(2); a.right = new TreeNode(3); a.left.left = new TreeNode(4); a.left.right = new TreeNode(5); a.right.left = new TreeNode(6); a.right.right = new TreeNode(7); System.out.println(new Solution().preorderTraversal(a)); }
Source非递归
/** * Definition for binary tree * 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> st = new ArrayList<Integer>(); if(root == null) return st; Stack<TreeNode> l = new Stack<TreeNode>(); l.add(root); while(!l.isEmpty()){//跟层序遍历那道题差不多,只不过这里用的是栈 TreeNode a = l.pop(); st.add(a.val); if(a.right != null){//由于用栈而不是队列,所以要先把右子树压进栈 l.push(a.right); } if(a.left != null){ l.push(a.left); } } return st; }}
Source非递归2
/** * Definition for binary tree * 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> st = new ArrayList<Integer>(); if(root == null) return st; Stack<TreeNode> l = new Stack<TreeNode>(); while(!l.isEmpty() || root != null ){ //注意判断信息不止是l不为空 if(root != null){ l.push(root); st.add(root.val); root = root.left; } else{ TreeNode a = l.pop(); root = a.right; } } return st; }}
0 0
- Binary Tree Preorder Traversal Java
- Binary Tree Preorder Traversal (Java)
- (java)Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- 【学习ios之路:Objective-C】NSArray和NSMutableArray
- 使用 Image.SCALE_SMOOTH算法进行图片压缩
- C++ Primer 第四版读书笔记(五)之语句
- 报错:java.lang.OutOfMemoryError: Java heap space
- ubuntu中安装和配置apache2
- Binary Tree Preorder Traversal (Java)
- mfc SetWindowText不起作用
- Andoird 4.2.2的Account Manager原理
- apache commons fileupload 处理文件上传的两种方式(流式和非流式)
- iOS中如何修改系统自带的导航栏的颜色
- VS2013编译jthread-1.3.1和jrtplib-3.9.1
- 必须记住的Myeclipse快捷键
- 36会话界面的完成
- 如何在Ubuntu中使用root账号登录(新增Ubuntu12.04/14.04)?