zoukankan      html  css  js  c++  java
  • Lintcode---把排序树组转换为高度最小的二叉树

    给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。

     注意事项

    There may exist multiple valid solutions, return any of them.

    样例

    给出数组 [1,2,3,4,5,6,7], 返回

         4
       /   
      2     6
     /     / 
    1   3  5   7


    思路:相当于给出中序遍历的结果,然后将其转换成二叉树。
       
        直接采用中间值来作为二叉树的根节点;
        将原数组分成左右均等或者相差一个数的两个新数组;
        然后递归的对这两个新数组进行相同的处理,这样对于每一个根节点,其左右子树的高度相差绝对值不会超过1,
        也就是满足了二叉平衡树的要求了
            
        其实思路很容易想到,但在实现的时候,对于折半后,每次递归边界问题犯了糊涂,绕进去了;
        下面的代码,思路就很清晰,学习!

    /**
     * Definition of TreeNode:
     * class TreeNode {
     * public:
     *     int val;
     *     TreeNode *left, *right;
     *     TreeNode(int val) {
     *         this->val = val;
     *         this->left = this->right = NULL;
     *     }
     * }
     */
    class Solution {
    public:
        /**
         * @param A: A sorted (increasing order) array
         * @return: A tree node
         */
        /*
        
        思路:相当于给出中序遍历的结果,然后将其转换成二叉树
        
        直接采用中间值来作为二叉树的根节点;
        将原数组分成左右均等或者相差一个数的两个新数组;
        然后递归的对这两个新数组进行相同的处理,这样对于每一个根节点,其左右子树的高度相差绝对值不会超过1,
        也就是满足了二叉平衡树的要求了
             
        其实思路很容易想到,但在实现的时候,对于折半后,每次递归边界问题犯了糊涂,绕进去了;
        下面的代码,思路就很清晰,学习!
        
        */
        
        TreeNode *sortedArrayToBSTCore(vector<int> &A, int start, int end){
    		if (start > end){
    			return NULL;
    		}
    		int mid = (start + end) / 2;
    		TreeNode *head = new TreeNode(A[mid]);//直接初始化了;
    		head->left = sortedArrayToBSTCore(A, start, mid - 1);
    		head->right = sortedArrayToBSTCore(A, mid + 1, end);
    		return head;
    	}
    	
    	
        TreeNode *sortedArrayToBST(vector<int> &A) {
            // write your code here
            if(A.size()==0){
                return NULL;
            }
            
    		int start = 0;
    		int end = A.size() - 1;
    		int mid = (start + end) / 2;
    		TreeNode *Head = new TreeNode(A[mid]);
    		Head->left = sortedArrayToBSTCore(A, start, mid - 1);
    		Head->right = sortedArrayToBSTCore(A, mid + 1, end);
    		return Head;
        }
    };
    
     
  • 相关阅读:
    【Prince2科普】衡量绩效的六大要素
    项目组合管理、项目集管理、项目管理和组织级项目管理之间的关系
    javascript中关系运算符的整理
    javascript中数组的基础----length和元素的求和
    回调函数和递归函数的应用
    谷歌浏览器打开时显示的是搜狗
    二级导航栏的立体显示
    利用css写的中英文切换的导航栏菜单
    javascript中的对象浅谈
    javascript中逻辑运算符总结
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/7070200.html
Copyright © 2011-2022 走看看