新农上路
- 积分
- 99
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-12-1
- 最后登录
- 1970-1-1
|
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
本帖最后由 wandergogogo 于 2014-12-17 04:14 编辑
Depth-first:pre-order, in-order, post-order
Pre-order:
preorder(node)
if node == null then return
visit(node)
preorder(node.left)
preorder(node.right)- public List<Integer> preorder(TreeNode root){
- List<Integer> res = new LinkedList<Integer>();
- if(root==null) return res;
- res.add(root.val);
- res.addAll(preorder(root.left));
- res.addAll(preorder(root.right));
- return res;
- }
复制代码 iterativePreorder(node)
parentStack = empty stack
while (node parentStack.isEmpty() or node != null)
if(node != null)
visit(node)
if (node.right != null) parentStack.push(node.right)
node = node.left
else
node = parentStack.pop()- public List<Integer> iterativePreorder(TreeNode root){
- List<Integer> res = new LinkedList<Integer>();
- if(root==null) return res;
- Stack<TreeNode> stack = new Stack<TreeNode>();
- Stack.push(root);
- while(!stack.isEmpty()){
- TreeNode top = stack.pop();
- res.add(top.val);
- if(root.right!=null) stack.push(top.right);
- if(root.left!=null) stack.push(top.left);
- }
- return res;
- }
复制代码 LeetCode Link: https://oj.leetcode.com/problems/binary-tree-preorder-traversal/
In-order:
inorder(node)
if node == null then return
inorder(node.left)
visit(node)
inorder(node.right)- List<Integer> inorder(TreeNode root){
- List<Integer> res = new LinkedList<Integer>();
- if(root==null) return res;
- res.addAll(inorder(root.left));
- res.add(root.val);
- res.addAll(inorder(root.right));
- return res;
- }
复制代码 iterativeInorder(node)
parentStack = empty stack
while (not parentStack.isEmpty() or node != null)
if (node != null)
parentStack.push(node)
node = node.left
else
noce = parentStack.pop()
visit(node)
node = node.right- public List<Integer> iterativeInorder(TreeNode root){
- List<Integer> res = new LinkedList<Integer>();
- if(root==null) return res;
- Stack<TreeNode> stack = new Stack<TreeNode>();
- while(!stack.isEmpty() || root!=null){
- if(root!=null){
- stack.push(root);
- root = root.left;
- }else{
- root = stack.pop();
- res.add(root.val);
- root = root.right;
- }
- }
- return res;
- }
复制代码 LeetCode Link: https://oj.leetcode.com/problems/binary-tree-inorder-traversal/
Post-order:
postorder(node)
if node == null then return
postorder(node.left)
postorder(node.right)
visit(node)- public List<Integer> postorder(TreeNode root){
- List<Integer> res = new LinkedList<Integer>();
- if(root==null) return res;
- res.addAll(postorder(root.left));
- res.addAll(postorder(root.right));
- res.add(root.val);
- return res;
- }
复制代码 iterativePostorder(node)
parentStack = empty stack
lastnodevisited = null
while(not parentStack.isEmpty() or node !=null)
if(node != null)
parentStack.push(node)
node = node.left
else
peeknode = parentStack.peek()
if(peeknode.right!=null and lastnodevisited != peeknode.right)
node = peeknode.right
else
visit(peeknode)
lastnodevisited = parentStack.pop()- public List<Integer> iterativePostorder(TreeNode root){
- List<Integer> res = new LinkedList<Integer>();
- if(root==null) return res;
- Stack<TreeNode> stack = new Stack<TreeNode>();
- TreeNode lastNodeVisited = null;
- while(!stack.isEmpty()||root!=null){
- if(root!=null){
- stack.push(root);
- root = root.left;
- }else{
- TreeNode peekNode = stack.peek();
- if(peeknode.right!=null && peeknode.right!=lastNodeVisited){
- root = peeknode.right;
- }else{
- stack.pop();
- res.add(peeknode.val);
- lastNodeVisited = peeknode;
- }
- }
- }
- return res;
- }
复制代码 LeetCode Link: https://oj.leetcode.com/problems/binary-tree-postorder-traversal/
|
上一篇: 小白自己想起来一道题 求大神解答~~下一篇: Code开刷
|