Leetcode——第108题

题目意思:将排序后的数组转换成二叉查找树。

二叉查找树的定义:

(1)若它的左子树不空,则其左子树上任意结点的关键字的值都小于根节点关键字的值。

(2)若它的右子树不空,则其右子树上任意结点的关键字的值都大于根节点关键字的值。

(3)它的左、右子树本身又是一个二叉查找树。

Description:已知一个按升序排列的数组,将它转换为一个高度平衡二叉树。其中,平衡二叉树(AVL树)被定义为其左子树和右子树都是高度平衡的二叉树,且左子树和右子树的高度之差的绝对值不超过1。


解题思路:因为给定的数组是按照升序排列的,所以可以先取出数组中间位置的值作为二叉查找树的根结点,然后以该数组中间位置的值为中心,将左边的数组划分到根结点的左子树中,右边的数组划分到根结点的右子树中,这样就能保证根结点的左子树上任意结点的值都小于根结点的值,右子树上任意结点的值大于根节点的值。接下来,可以使用递归地方法继续取出左边数组的中间值作为根结点的左子结点,右边数组的中间值作为根结点的右子结点,然后以左边数组中间值为中心,再次划分左右子树,右边数组同理,如此递归下去,对于每个结点,总是能保证其左子树上任意结点的值都要小于该节点的值,其右子树上任意结点的值都要大于该节点的值。









猜你喜欢

转载自blog.csdn.net/not_guy/article/details/78762392