Python leetcode tree记录

栏目: Python · 发布时间: 5年前

内容简介:Python中二叉树的定义其他编程语言常见的定义:内存模型:

Python中二叉树的定义

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

其他编程语言常见的定义:

Python leetcode tree记录

内存模型:

Python leetcode tree记录

二叉树分类

1. 满二叉树(Full Binary Tree)

除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树,如下图:

Python leetcode tree记录

2. 完全二叉树(Complete Binary Tree)

如果一棵二叉树有n个结点,深度为k,它的每一个结点都与高度为k的满二叉树中编号为1~n的结点一一对应,则称该树为完全二叉树。如下图:

Python leetcode tree记录

3. 平衡二叉树(Balanced Binary Tree)

平衡二叉树又称AVL树,平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。如下图:

Python leetcode tree记录

4.二叉搜索树

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉 排序 树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 如下图:

Python leetcode tree记录

常用算法操作

通用模板

## 1个root
def slove(root):
    if not root: return xxxx
    if f(root): return yyyy
    l = slove(root.left)
    r = slove(root.right)
    return g(root, l, r)
    
## 2个root    
def slove(p, q):
    if not p and not q: return xxxx
    if f(p, q): reutn yyyy
    c1 = slove(p.child, q.child)
    c2 = slove(p.child, q.child)
    return g(p, q, c1, c2)
复制代码

三种遍历

常见的遍历有先序遍历,中序遍历,后序遍历。

  • 先序遍历:根节点->左子树->右子树
  • 中序遍历:左子树->根节点->右子树
  • 后序遍历:左子树->右子树->根节点
    Python leetcode tree记录

先序遍历

def preorder(root):
    if not root: return 
    print(root.val)
    preorder(root.left)
    preorder(root.right)
复制代码

中序遍历

def inorder(root):
    if not root: return
    inorder(root.left)
    print(root.val)
    inorder(root.right)
复制代码

后序遍历

def postorder(root):
    if not root: return
    postorder(root)
    postorder(root)
    print(root.val)
复制代码

创建二叉搜索树(BST)

根据一个nums数组,创建一个BST

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
    
    
def createBST(nums):
    root = None
    for num in nums:
        root = insert(root, num)
    return root    
    
def insert(root, val):
    # 注意 这个二叉树不是平衡的
    if not root: return TreeNode(val)
    if val <= root.val:
        root.left = insert(root.left, val)
    else:
        root.right = insert(root.right, val)
    return root
    
def inorder(root):
    if not root: return
    inorder(root.left)
    print(root.val)
    inorder(root.right)

def inorder_list(root):
    # 得到中序遍历的数组
    res = []
    if not root: return []
    res.append(root.val)
    res.extend(inorder_list(root.left))
    res.extend(inorder_list(root.right))
    return res


if __name__ == "__main__":
    nums = [5,1,4,2,3,6]
    root = createBST(nums)
    inorder(root)
复制代码

上面的代码执行结果为:

1
2
3
4
5
6
复制代码

找到二叉树的最大值

def maxVal(root):
    max_left = maxVal(root.left)
    max_right = maxVal(root.right)
    return max(root.val, max_left, max_right)

复制代码

最大深度

leetcode 104

def maxDeep(root):
    if not root: return 0
    l = maxDeep(root.left)
    r = maxDeep(root.right)
    return max(l, r) + 1
复制代码

最小深度

leetcod 111

def minDeep(root):
    if not root: return 0
    if not root.leght and root.right return 1
    l = minDeep(root.left)
    r = minDeep(root.right)
    if not root.left: return 1 + r
    if not root.right: return 1 + l # 1 + left
    return max(l, r) + 1
复制代码

以上所述就是小编给大家介绍的《Python leetcode tree记录》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

轻公司

轻公司

李黎、杜晨 / 中信出版社 / 2009-7 / 39.00元

《轻公司》解读了在互联网和IT技术越来越充裕的环境里,传统的商业法则是如何被打破,而新的商业法则如何建立起来的过程。大量生动翔实的采访,为我们构筑了互联网和IT技术影响下的未来商业趋势。李黎和杜晨在《IT经理世界》上发表了一篇封面报道《轻公司》后,迅速在传统行业及互联网行业产生极大反响,无论是老牌的传统企业、创业公司、风险投资商,都视这篇文章为新商业宝典,甚至有业界人士评价,这篇文章拯救了中国的电......一起来看看 《轻公司》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具