zoukankan      html  css  js  c++  java
  • 最小高度的BST

          加深对BST的构建过程及递归思想的理解。

    /*****************************************************
    * file MinimalBST.cpp
    * date 2016/05/30 16:00
    
    * 问题描述:
    对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。
    给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。
    
    * 问题分析:
    由于没有让给出树的构造过程,所以可以直接通过归纳的方式计算得出结果。但是在这里我们仍旧使用递归的方式模拟树的构建,并最终得到二叉搜索树。
    题目中要求树的高度最小实际上是让构造一个平衡二叉树,或者说为了让左右两个子树的节点数量越接近越好。
    
    ///虽然可以直接公式算高度,不过也写了个建树顺便算高度的
    *****************************************************/
    #include <iostream>
    using namespace std;
    #include <vector>
    
    struct TreeNode
    {
        int val;
        TreeNode* left;
        TreeNode* right;
        TreeNode(int x) :val(x), left(nullptr), right(nullptr){}
    };
    class MinimalBST {
    public:
        TreeNode* buildBST(vector<int> _vals,int _left,int _right)
        {
            if (_left>_right)
            {
                return nullptr;
            }
            int mid = _left + (_right - _left) / 2;
            TreeNode* root = new TreeNode(_vals[mid]);
            root->left = buildBST(_vals, _left, mid - 1);
            root->right = buildBST(_vals, mid + 1, _right);
            return root;
        }
        int highBST(TreeNode* _root)
        {
            if (_root==nullptr)
            {
                return 0;
            }
            int left = highBST(_root->left);
            int right = highBST(_root->right);
            return left > right ? (left + 1) : (right + 1);
        }
        int buildMinimalBST(vector<int> vals) {
            // write code here
            if (vals.size()<=0)
            {
                return 0;
            }
            TreeNode* root = buildBST(vals,0,vals.size()-1);
            return highBST(root);
        }
    };
  • 相关阅读:
    Objects in this class cannot be updated outside
    操作系统原理好书推荐
    Can't initialize OCI
    比较好的GIS blog
    栅格数据开发
    arcgis 本地地图服务 silverlight 调用报错 .
    (转载)Rasterdataset Load data耗时
    网络达人梁宏达
    arcengine总结(1)栅格数据开发
    MyNPOI V1.2发布并开放源码,让.NET Excel导出将简单进行到底【转】
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/5543001.html
Copyright © 2011-2022 走看看