查看: 1890| 回复: 5
跳转到指定楼层
上一主题 下一主题
收起左侧

[树/链表/图] 二叉树一些个人总结

全局:

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

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

x
在github wiki功能开始帖子总结一些典型算法,这里是花了一个周末学习的二叉树,欢迎指教!!
https://github.com/Issac-F/Algorithm-Ocean/wiki/%E4%BA%8C%E5%8F%89%E6%A0%91

评分

参与人数 3大米 +4 收起 理由
JackXin + 1 给你点个赞!
frk + 1 给你点个赞!
14417335 + 2

查看全部评分


上一篇:需求短期leetcode号,可以组队拼,我只需要准备sql
下一篇:既然各公司都喜欢做编程题,那么何不候选人都统一先过来做一份卷子,通过之后再面试?
🔗
FanL 2020-7-4 16:21:25 | 只看该作者
全局:
+1 这个算是浅显易懂
回复

使用道具 举报

🔗
shawn_lyu 2020-7-4 23:10:34 | 只看该作者
全局:
总结好评!
(提供一下前中后traversal的迭代、递归代码 https://shawnlyu.com/algorithms/40/
(以及几个分治法的练习:
(148. Sort List
(23. Merge k Sorted Lists
(215. Kth Largest Element in an Array

评分

参与人数 1大米 +2 收起 理由
Emol + 2 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
李浩泉 2020-7-5 04:27:45 | 只看该作者
全局:
如果有PYTHON版的就更好啦!
回复

使用道具 举报

全局:
请问面试的时候碰到任何tree的问题,如果只给出iterative solution的话一般会加问recursive solution吗? 个人觉得iteration比较intuitive, recursion基本想不出来
回复

使用道具 举报

全局:
# Binary search tree

## Table of Contents

1. [Traversal](#traversal)
   - [In-order](#in-order)
   - [Pre-order](#pre-order)
   - [Post-order](#post-order)
   - [Breath-first-search](#BFS)
  
## Traversal <a name="traversal"></a>

- In-order (Left Root Right) <a name="in-order"></a>
  
        # Definition for a binary tree node.
        # class TreeNode(object):
        #     def __init__(self, x):
        #         self.val = x
        #         self.left = None
        #         self.right = None

        # Use recursion
        def inorder_recursive (root):
            if root == None:
                return
            inorder_recursive(root.left)
            do_something_about(root)
            inorder_recursive(root.right)

        # Use stack
        def inorder_nonrecursive(root):
            stack = []
            node = root

            while True:
                if node != None:
                    stack.append(node)
                    node = node.left
                else:
                    if len(stack) == 0:
                        break
                    node = stack.pop()
                    do_something_about(node)
                    node = node.right

- Pre-order (Root, Left, Right) <a name="pre-order"></a>

        # Use recursion
        def preorder_recursive(root):
            if root == None:
                return
            do_something_about(root)
            preoder_recursive(root.left)
            preorder_recursive(root.right)

        # Use stack
        def preorder_nonrecursive(root):
            stack = []
            node = root

            while True:
                if node != None:
                    do_something_about(node)
                    if node.right != None:
                        stack.append(node.right)
                    node = node.left
                else:
                    if len(stack) == 0:
                        break
                    node = stack.pop()

- Post-order (Left, Right, Root) <a name="post-order"></a>

        # Use recursion
        def postorder_recursive(root):
            if root == None:
                return
            postorder_recursive(root.left)
            postorder_recursive(root.right)
            do_something_about(root)

        # Use stack
        def postorder_nonrecursive(root):
            stack = []
            node = root

            while True:
                if node != None:
                    stack.append((node, False))
                    node = node.left
                else:
                    if len(stack) == 0:
                        break
                    node, visited = stack.pop()
                    if not visited:
                        stack.append((node, True))
                        node = node.right
                    else:
                        do_something_about(node)
                        node = None         # force to come back to the 'else' branch in next iteration

- Breath-first-search <a name="BFS"></a>

        # Use queue
        def BFS_BST(root):
            if root == None:
                return
            queue = [root]
            while queue:
                node = queue.pop(0)
                do_something_about(node)
                if node.left != None:
                    queue.append(node.left)
                if node.right != None:
                    queue.append(node.right)
回复

使用道具 举报

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

本版积分规则

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