Python实现二叉树刷题的常用语法

二叉树层数与节点数

二叉树层度从0开始计算,根节点位于第0层。假设当前位于第 l l l层,则每一层至多有 2 l 2^l 2l个节点。一个具有 L L L层的二叉树至多有 1 + 2 + 4 + . . . . . . + 2 L = 2 L + 1 − 1 1+2+4+......+2^L=2^{L+1}-1 1+2+4+......+2L=2L+11个节点。一个拥有 N N N个节点的二叉树高度至少为 ⌊ l o g 2 N ⌋ \lfloor log_2N\rfloor log2N

二叉树类型

完全二叉树

若设二叉树的深度为 L L L,除第 L L L层外,其它各层的结点数都达到最大,第 L L L层所有的结点都连续集中在最左边。

满二叉树

一棵二叉树的结点要么是叶子结点,要么它有两个子结点。(如果一个二叉树的层数为 L L L,且结点总数是 2 L + 1 − 1 2^{L+1} -1 2L+11,则它就是满二叉树。)

二叉搜索树

若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。

特点

对前序遍历排序可以得到中序遍历(Leetcode449)

平衡二叉树

树节点结构

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

前序遍历

迭代

# 迭代法,利用栈的思想,先进先处理
def preorderTraversal(self, root):
        if not root:
            return []
        res = []
        nodes = [root]
        if root:
            while nodes:
                # 处理最右边的
                node = nodes.pop(-1)
                res.append(node.val)
                if node.right:
                    nodes.append(node.right)
                if node.left:
                    nodes.append(node.left)   
        return res

递归

中序遍历

迭代

class Solution:
    def inorderTraversal(self, root: TreeNode) -> List[int]: 
        stack, ret = [], []
        cur = root
        while stack or cur:
            if cur:
                stack.append(cur)
                cur = cur.left
            else:
                cur = stack.pop()
                ret.append(cur.val)
                cur = cur.right

递归

求节点个数

def countNodes(self, root):
	if not node:
    	return 0
	return 1 + dfs(node.left) + dfs(node.right)

求最大深度

def maxDepth(self, root: TreeNode):
	if not root:
    	return 0
	return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right))

已知前序遍历和中序遍历复原二叉树

已知后序遍历和中序遍历复原二叉树

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值