二叉搜索树BST广度优先搜索遍历BFS计算树高度,非递归,binarytree,python

Posted zhangphil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉搜索树BST广度优先搜索遍历BFS计算树高度,非递归,binarytree,python相关的知识,希望对你有一定的参考价值。

二叉搜索树BST广度优先搜索遍历BFS计算树高度,非递归,binarytree,python

基本原理:首先对二叉树搜索树进行BFS广度优先搜索遍历,搜索遍历后的节点访问依次顺序的存放在数组中,那么此时数组中最后一个节点,即是树中距离根最远的节点。然后用这个节点逆向的沿着父节点一层一层的往上爬,每爬一层就计数为1,直到根节点没有了父节点为止,算法结束。最终累计的计数即为树的高度。也就是说,广度遍历搜索是一种层次推进的搜索遍历,具体在BST二叉树搜索树中,一层代表数的高度1,对层高计数,即为该树的高度。

from binarytree import bst, get_parent


def app():
    t = bst(height=0, is_perfect=False)
    print(t)
    print('标准API获得的树高', t.height)

    print('-----')
    h = get_tree_height(t)
    print('广度遍历思想求得树高', h)


def get_tree_height(node):
    most_far_edge_node = node.levelorder.pop()
    print('most_far_edge_node', most_far_edge_node.value)

    tree_height = 0
    while True:
        print('-')
        p = get_parent(node, most_far_edge_node)
        if p is not None:
            print('parent', most_far_edge_node.value, '->', p.value)
            tree_height = tree_height + 1
            most_far_edge_node = p
        else:
            break

    return tree_height


if __name__ == '__main__':
    app()

输出:


0________
         \\
    ______5__________________
   /                         \\
  1__                  _______57_________
     \\                /                  \\
      3          ____47               ____62
     / \\        /      \\             /
    2   4     _23       48         _60
             /   \\        \\       /   \\
            20    35       56    58    61

标准API获得的树高 5
-----
most_far_edge_node 61
-
parent 61 -> 60
-
parent 60 -> 62
-
parent 62 -> 57
-
parent 57 -> 5
-
parent 5 -> 0
-
广度遍历思想求得树高 5

以上是关于二叉搜索树BST广度优先搜索遍历BFS计算树高度,非递归,binarytree,python的主要内容,如果未能解决你的问题,请参考以下文章

binarytree二叉树节点BFS广度优先搜索遍历,基于队列,非递归,python

基础扫盲:二叉树系列 第二讲(层次遍历与BFS)

BFS(广度优先算法)也就这么回事

06-二分搜索树 BST

把二叉树打印成多行

二叉树深度优先遍历和广度优先遍历