二叉搜索树BST节点DFS深度优先搜索遍历,基于栈,非递归,binarytree,python

Posted zhangphil

tags:

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

binarytree二叉树节点DFS深度优先搜索遍历,基于栈,非递归,python

注意对已经访问过的节点的处理,在while循环中,如果在栈回退时候,遇到之前访问过的节点,则直接弹出。弹出的情况还有一种就是该节点没有左右子节点了,表明到了尽头。

from binarytree import bst


def app():
    t = bst(height=3, is_perfect=True)
    print(t)

    print('-----')
    dfs(t)


def dfs(node):
    if node.left is None and node.right is None:
        return node

    stack = [node]
    visited = []

    while True:
        if len(stack) == 0:
            break

        visit_node = stack.pop()
        visited.append(visit_node)

        right_child = visit_node.right
        left_child = visit_node.left

        if right_child is not None:
            stack.append(right_child)
        if left_child is not None:
            stack.append(left_child)

    print('dfs', visited)


if __name__ == '__main__':
    app()

输出:

        ______7_______
       /              \\
    __3__           ___11___
   /     \\         /        \\
  1       5       9         _13
 / \\     / \\     / \\       /   \\
0   2   4   6   8   10    12    14

-----
dfs [Node(7), Node(3), Node(1), Node(0), Node(2), Node(5), Node(4), Node(6), Node(11), Node(9), Node(8), Node(10), Node(13), Node(12), Node(14)]

以上是关于二叉搜索树BST节点DFS深度优先搜索遍历,基于栈,非递归,binarytree,python的主要内容,如果未能解决你的问题,请参考以下文章

binarytree二叉树节点DFS深度优先搜索遍历,递归,python

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

每天一道算法题验证二叉搜索树(深度优先搜索)

简述深度优先搜索遍历的方法。

二分搜索树的深度优先遍历和广度优先遍历

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