【发布时间】:2018-04-29 01:00:20
【问题描述】:
我需要编写一个算法(用伪代码)来检查给定的 BST 树是否是有效的 AVL 树。为此,我需要给每个节点一个等级(在 AVL 树中,等级是指节点的高度),因此结果将是一个有效的 AVL 树。
我想到了一个简单的算法,它在每一步中计算一个节点的高度和它的两个儿子的高度(如果儿子为空,那么高度为-1),然后检查高度之间的差异是否为1,1 或 1,2 或 2,1。如果不是,那么它不是 AVL 树。如果是,那么我们对 node.left 和 node.right 做同样的事情。
我对该算法的问题是时间复杂度非常大,甚至可能达到 O(n^2)。有没有更高效的算法?
我想找到的另一种算法是,当给定一个有效的 AVL 树和每个节点的等级 (rank=height) 时,我需要找到一系列构建同一棵树的插入。我想过按键的排序顺序来做,但结果不对。
【问题讨论】:
标签: algorithm insert binary-search-tree pseudocode avl-tree