BST转换为对称结构树

时间:2018-09-03 16:17:33

标签: algorithm binary-search-tree avl-tree

(我见过一些非常类似的练习,但所有练习都是规则的二叉树)。就像在标题中一样,我必须提出一种将BST转换为具有对称结构的BST的算法,该算法包含与上一个相同的值。例如

enter image description here

我的想法是从一开始就构建一棵新树。我将从一个新的根开始,该根在原始树的值的排序数组中将位于原始根的对称位置。在上面的示例中:3 5 6 7 12数字7将是新的根,因为与先前的根5相比,它的左侧/右侧的节点数反转了。但是,这并不能完全解决问题,因为新树取决于插入顺序。我想通过根据平衡进行旋转来结束它。我的问题是:这棵树是否必须是AVL树,以便我可以执行轮换(这意味着运动中存在错误)。还是有解决此问题的简便方法?

1 个答案:

答案 0 :(得分:0)

我将分两步解决此问题:

  1. 在每个节点中交换左右子指针。这将从左到右镜像树,颠倒所有值的顺序。
  2. 从开始进行向前有序遍历,从结束开始进行向后有序遍历。进行锁定步骤,​​在向前和向后位置之间交换值,直到它们相遇为止。这将使值的顺序恢复为原始顺序,同时保留新的树结构。