📣 独立日限时特惠: VIP通行证立减$68
查看: 2149| 回复: 2
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] Tree Traversal总结

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

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)
  1. public List<Integer> preorder(TreeNode root){
  2.     List<Integer> res = new      LinkedList<Integer>();
  3.     if(root==null) return res;
  4.     res.add(root.val);
  5.     res.addAll(preorder(root.left));
  6.     res.addAll(preorder(root.right));
  7.     return res;
  8. }
复制代码
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()
  1. public List<Integer>  iterativePreorder(TreeNode root){
  2.     List<Integer> res = new LinkedList<Integer>();
  3.     if(root==null) return res;
  4.     Stack<TreeNode> stack = new Stack<TreeNode>();
  5.     Stack.push(root);
  6.     while(!stack.isEmpty()){
  7.         TreeNode top = stack.pop();
  8.         res.add(top.val);
  9.         if(root.right!=null) stack.push(top.right);
  10.         if(root.left!=null) stack.push(top.left);
  11.     }
  12.     return res;
  13. }
复制代码
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)
  1. List<Integer> inorder(TreeNode root){
  2.     List<Integer> res = new LinkedList<Integer>();
  3.     if(root==null) return res;
  4.     res.addAll(inorder(root.left));
  5.     res.add(root.val);
  6.     res.addAll(inorder(root.right));
  7.     return res;
  8. }
复制代码
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
  1. public List<Integer> iterativeInorder(TreeNode root){
  2.     List<Integer> res = new LinkedList<Integer>();
  3.     if(root==null) return res;
  4.     Stack<TreeNode> stack = new Stack<TreeNode>();
  5.     while(!stack.isEmpty() || root!=null){
  6.         if(root!=null){
  7.             stack.push(root);
  8.             root = root.left;
  9.         }else{
  10.             root = stack.pop();
  11.             res.add(root.val);
  12.             root = root.right;
  13.        }
  14.     }
  15.     return res;
  16. }
复制代码
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)
  1. public List<Integer> postorder(TreeNode root){
  2.     List<Integer> res = new LinkedList<Integer>();
  3.     if(root==null) return res;
  4.     res.addAll(postorder(root.left));
  5.     res.addAll(postorder(root.right));
  6.     res.add(root.val);
  7.     return res;
  8. }
复制代码
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()
  1. public List<Integer> iterativePostorder(TreeNode root){
  2.     List<Integer> res = new LinkedList<Integer>();
  3.     if(root==null) return res;
  4.     Stack<TreeNode> stack = new Stack<TreeNode>();
  5.     TreeNode lastNodeVisited = null;
  6.     while(!stack.isEmpty()||root!=null){
  7.         if(root!=null){
  8.             stack.push(root);
  9.             root = root.left;
  10.         }else{
  11.             TreeNode peekNode = stack.peek();
  12.             if(peeknode.right!=null && peeknode.right!=lastNodeVisited){
  13.                 root = peeknode.right;
  14.             }else{
  15.                 stack.pop();
  16.                 res.add(peeknode.val);
  17.                 lastNodeVisited = peeknode;
  18.            }
  19.         }
  20.     }
  21.     return res;
  22. }
复制代码
LeetCode Link: https://oj.leetcode.com/problems/binary-tree-postorder-traversal/



评分

参与人数 2大米 +20 收起 理由
阿童木 + 10 回答的很好!
nibuxing + 10 感谢分享!

查看全部评分


上一篇:小白自己想起来一道题 求大神解答~~
下一篇:Code开刷
🔗
geng77 2014-12-17 06:12:57 | 只看该作者
全局:
good summary
回复

使用道具 举报

🔗
gjy 2015-1-4 14:30:16 | 只看该作者
本楼:
全局:
赞,不错!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表