python-树
节点:父节点 子节点 兄弟节点 子树
边
每个节点最多有两个子节点,就叫二叉树
二叉搜索树:左子节点小于根节点,右子节点大于根节点
平衡二叉树:AVL树,左右子树高度差绝对值不超过1,并且左右两个子树都是一颗平衡二叉树
DFS:深度优先遍历
使用栈的数据结构,和BFS差别不大,只是由队列转换为栈
先将根节点入栈,再出栈,出栈的过程中将根节点的右子树和左子树依次入栈,如果没有左子树和右子树则不入栈
代码:
#计算二叉树的最大高度 def f(root): if not root:return 0 return max(f(root.left),f(root.right))+1 #将一组有序数组转换成高度最小的二叉搜索树 #取出中位数,依次对左右两边进行计算 def f(nums): if not nums:return 0 tree = nums[len(nums)//2] tree.left=f(:nums[len(nums)//2]) tree.right=f(nums[len(nums)//2+1:]) return tree
BFS:广度优先遍历
将数结构一层一层遍历出
需要一个队列和集合,队列用于将每一层数值入队,集合用于统计最终结果
出队一次,入队子树,节点a出队后,如果节点a有子树则将子树按从左向右的顺序全部入队,如果没有子树则不入队,进行下一次的出队
代码:
def f(root): if not tree:return 0 queue=[root] res=0 while queue: tmp=[] for node in queue: if node.left not None:tmp.append(node.left) if node.right not None:tmp.append(node.right) res+=1 queue=tmp return res
需要学习:https://blog.csdn.net/qq_25940921/article/details/82183093