博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Convert Sorted Array to Binary Search Tree 将有序数组转化为平衡二叉排序树(重重)
阅读量:4108 次
发布时间:2019-05-25

本文共 1655 字,大约阅读时间需要 5 分钟。

题目:

解答:

递归建立平衡二叉树,将中间的值建立为根节点,然后左右两部分的数组分别建立为左右子树。

代码:

class Solution {	  public:		  TreeNode *sortedArrayToBST(vector
&num) { if (num.size() == 0) return NULL; TreeNode *root = new TreeNode(0); //新建一个节点作为根节点 build(root, 0, num.size() - 1, num); return root; } private: void build(TreeNode *root, int start, int end, vector
&num) { int mid = start + (end - start) / 2; //将中间值作为根节点的值 root->val = num[mid]; if (start <= mid - 1) //如果左边数组不为空 { TreeNode *node = new TreeNode(0); //新建一个节点,为根节点的左子节点,同时作为左子树的根节点传入递归程序 root->left = node; build(root->left, start, mid - 1, num); } if (mid + 1 <= end) //如果右边数组不为空 { TreeNode *node = new TreeNode(0); //新建一个节点,为根节点的右子节点,同时作为右子树的根节点传入递归程序 root->right = node; build(root->right, mid + 1, end, num); } } };

贴一个更简洁的代码:(重点)

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode* sortedArrayToBSTUtil(vector
& num, int start, int end) { if(start > end) return NULL; int mid = start+(end-start)/2; TreeNode* root = new TreeNode(num[mid]); root->left = sortedArrayToBSTUtil(num, start, mid-1); root->right = sortedArrayToBSTUtil(num, mid+1, end); return root; } TreeNode *sortedArrayToBST(vector
&num) { // Start typing your C/C++ solution below // DO NOT write int main() function return sortedArrayToBSTUtil(num, 0, num.size()-1); }};

转载地址:http://qytsi.baihongyu.com/

你可能感兴趣的文章
COMMTIMEOUTS详解
查看>>
网络通信时字节序转换原理与网络字节序、大端和小端模式
查看>>
对SendMessage与PostMessage的理解
查看>>
用PostMessage或SendMessage发送结构体指针
查看>>
[VC]SendMessage和PostMessage发送消息(不同进程传递字符串)
查看>>
使用J-Link ARM烧录FLASH
查看>>
驻波比
查看>>
解FPGA中的RAM、ROM和CAM;ROM、RAM、DRAM、SRAM、FLASH
查看>>
FPGA的基础知识
查看>>
银联POS规范总结
查看>>
NFC无线功能
查看>>
APN
查看>>
MDK中One ELF Section per Function选项功能探究
查看>>
基于PBOC的电子钱包消费交易过程
查看>>
基于PBOC的电子钱包的圈存过程
查看>>
PBOC/EMV之电子现金应用
查看>>
arm三大编译器的不同选择编译
查看>>
如何编写高效率稳定的单片机代码
查看>>
有趣的keil MDK细节
查看>>
Ubuntu手动挂载U盘的方法
查看>>