Day04 二叉树+LeetCode98、102、107

二叉树

1、二叉树是一颗只有两个结点的数。如下图所示:
在这里插入图片描述
2、特点:
1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。
2)左子树和右子树是有顺序的,次序不能任意颠倒。
3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。

3、性质
1)在二叉树的第i层上最多有2i-1 个节点 。(i>=1)
2)二叉树中如果深度为k,那么最多有2k-1个节点。(k>=1)
3)n0=n2+1 n0表示度数为0的节点数,n2表示度数为2的节点数。
4)在完全二叉树中,具有n个节点的完全二叉树的深度为[log2n]+1,其中[log2n]是向下取整。
5)若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点有如下特性:

  • (1) 若 i=1,则该结点是二叉树的根,无双亲, 否则,编号为 [i/2] 的结点为其双亲结点;
  • (2) 若 2i>n,则该结点无左孩子, 否则,编号为 2i 的结点为其左孩子结点;
  • (3) 若 2i+1>n,则该结点无右孩子结点, 否则,编号为2i+1 的结点为其右孩子结点。

4、二叉树搜索
前序遍历,根->左子树->右子树
中序遍历,左子树->根->右子树
后序遍历,左子树->右子树->根
所谓前序中序后序,都是指的根节点

LeetCode题目

98. 验证二叉搜索树
在这里插入图片描述
思路:
根据搜索二叉树的特点,采用递归的思想,只要每个树的左右子树均满足搜索二叉树即可。
代码:
在这里插入图片描述
(今天代码复制总出错,抱歉只能贴图)
在这里插入图片描述

102. 二叉树的层次遍历
在这里插入图片描述
先进先出
代码:

class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        
        if root is None:
            return []
        stack = [root]
        list_sum = []
        while stack:         # 设置none出
            list = []                                   #出栈
            for i in range(len(stack)):      #每一层
                cur = stack.pop(0)
                list.append(cur.val)
                if cur.left:                        
                    stack.append(cur.left)      #入栈
                if cur.right:
                    stack.append(cur.right)
            list_sum.append(list)
        return list_sum

在这里插入图片描述
LeetCode107. 二叉树的层次遍历 II

在这里插入图片描述
思路:与102题相同,只是最后返回的列表res逆序。
代码:

class Solution(object):
    def levelOrderBottom(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        if not root:
            return []        
        queue = [root]        
        res = []       
        while queue:           
                templist = []            
                length = len(queue)            
                for i in range(length):                
                    temp = queue.pop(0)                
                    templist.append(temp.val)                
                    if temp.left:                    
                        queue.append(temp.left)                
                    if temp.right:                    
                        queue.append(temp.right)            
                res.append(templist)        
        return res[::-1]

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值