由节点(node)组成,每个节点有零个或多个子节点(child node),没有父节点的是根节点(root node),每个非根节点只有一个父节点(parent root),没有任何子节点的节点叫叶子节点(leaf node),一棵树中,只有一个root node
二叉树(binary tree)
每个节点最多有两个子节点,两个子节点分别被称为左孩子(left child)和右孩子(right child),叶子节点:没有孩子节点的节点
子树(sub-tree)
树中的每个节点代表以它为根的一颗树,左孩子所代表的树称为左子树(left sub-tree),右孩子所代表的树称为右孩子树(right sub-tree)
文件系统:B+树
字典树,平衡树
二叉树的遍历
先序遍历 根左右
中序遍历 左根右
后序遍历 左右根
递归
数据结构的递归 树就是一种递归的数据结构
算法(程序)的递归 函数自己调用自己
递归的三要素
递归的定义 首先这个问题或者数据结构得是递归定义的
递归的出口 什么时候递归终止
递归的拆解 递归不中值的时候,如何分解问题
class TreeNode:
def __init__(self, val):
self.val = val
self.left = self.right = None
def __str__(self):
return "{val:%s, left:%s, right:%s}" % (self.val, self.left, self.right)
node1 = TreeNode(1)
node2 = TreeNode(2)
node3 = TreeNode(3)
node1.left = node2
node1.right = node3
print(node1)
print(node2)
print(node3)
# 斐波那契数列
class Solution:
def fibonacci(self, n):