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

posted @ 2021-02-23 17:40  hkk  阅读(26)  评论(0)    收藏  举报