内容简介:Python中二叉树的定义其他编程语言常见的定义:内存模型:
Python中二叉树的定义
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None 复制代码
其他编程语言常见的定义:
内存模型:
二叉树分类
1. 满二叉树(Full Binary Tree)
除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树,如下图:
2. 完全二叉树(Complete Binary Tree)
如果一棵二叉树有n个结点,深度为k,它的每一个结点都与高度为k的满二叉树中编号为1~n的结点一一对应,则称该树为完全二叉树。如下图:
3. 平衡二叉树(Balanced Binary Tree)
平衡二叉树又称AVL树,平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。如下图:
4.二叉搜索树
二叉查找树(Binary Search 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) 复制代码
三种遍历
常见的遍历有先序遍历,中序遍历,后序遍历。
- 先序遍历:根节点->左子树->右子树
- 中序遍历:左子树->根节点->右子树
- 后序遍历:左子树->右子树->根节点
先序遍历
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记录》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。