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);
        }
    };
  • 相关阅读:
    【原】IOS文件操作
    【原】UIWebView加载本地pdf、doc等文件
    【转】好东西!sqlite3中BLOB数据类型存储大对象运用示例
    ASP.NET环境下配置FCKEditor并上传图片及其它文件
    iis php环境配置完整版
    js校验服务器控件是否为空
    vim 分屏显示
    各大搜索引擎网站提交端口的快速通道
    unix动态链接库操作
    回车(CR)与换行(LF), '\r'和'\n'的区别
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/5543001.html
Copyright © 2011-2022 走看看