给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。

注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。

例如,

给定二叉搜索树:

        4
/ \
2 7
/ \
1 3 和 插入的值: 5

你可以返回这个二叉搜索树:

         4
/ \
2 7
/ \ /
1 3 5

或者这个树也是有效的:

         5
/ \
2 7
/ \
1 3
\
4




/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
/*
算法思想:
递归的方法,由于二叉搜索树自带二分的性质,那么首先根结点比较,如果大于根结点值的话,说明肯定要插入到右子树中。所以接下来跟7比较,对于递归函数来说,结点7也可以当作是一个新的根结点,那么由于结点7的值大于目标值5,所以要去其左子树,我们发现其左子结点为空,那么我们就可以根据目标值来生成一个新的结点,然后连到结点7的左子树上即可。那么在递归函数中,首先判断当前结点是否为空,为空的话就新建一个结点返回。否则就判断目标值是否小于当前结点值,是的话就对左子结点调用递归函数,并将返回值赋给当前结点的左子结点,否则就对右子结点调用递归函数,并将返回值赋给当前结点的右子结点,最后返回当前结点即可。
*/
//算法实现: class Solution {
public:
TreeNode* insertIntoBST(TreeNode* root, int val) {
if (!root)
return new TreeNode(val);
if (val < root->val) //目标值小于当前结点值,对左子结点调用递归函数
root->left = insertIntoBST(root->left, val);
else
root->right = insertIntoBST(root->right, val);
return root;
}
}; /*
算法思想:
迭代的方法,首先还是判空,若为空,就新建结点返回。然后用一个变量cur来遍历,在while循环中,如果当前值大于目标值,如果其左子结点不存在,那么我们新建结点,并连上其左子结点,并跳出循环;若左子结点存在,则cur指向其左子结点。否则,当前值小于目标值,若其右子结点不存在,新建结点并连上其右子结点,并跳出循环;若右子结点存在,则cur指向其右子结点。最后返回root即可。
*/
//算法实现: class Solution {
public:
TreeNode* insertIntoBST(TreeNode* root, int val) {
if (!root)
return new TreeNode(val);
TreeNode *cur = root;
while (true) {
if (cur->val > val) {
if (!cur->left) {
cur->left = new TreeNode(val);
break;
}
cur = cur->left;
}
else {
if (!cur->right) {
cur->right = new TreeNode(val);
break;
}
cur = cur->right;
}
}
return root;
}
};

最新文章

  1. 用词法分析器Flex过滤日志
  2. SCCM 客户端的修复
  3. 在Window的IIS中创建FTP的Site并用C#进行文件的上传下载
  4. 1301. The Trip
  5. Java泛型总结
  6. Hadoop学习笔记(一)
  7. Objective-c——UI基础开发第六天(UITableView)
  8. html判断IE版本
  9. Spinlock
  10. 安装scrapy
  11. C#文件压缩
  12. 旧Mj下拉刷新 An instance 0xca90200 of class UITableView was deallocated while key value observers were s
  13. linux 查看日志
  14. POJ 1308 Is It A Tree?--题解报告
  15. nginx知识点简单回顾
  16. drbd(四):drbd多节点(drbd9)
  17. 在微信浏览器中 location.reload() 不刷新解决方案(直接调用方法)
  18. JavaScript深入之执行上下文栈
  19. JAVA 编程思想第一章习题
  20. NServiceBus VS MassTransit 从 stackoverflow.com 翻译而来,希望对这两个技术比较关心的同学有帮助

热门文章

  1. AcWing 369. 北大ACM队的远足
  2. 题解-Sakuya&#39;s task
  3. Windows的API功能查询
  4. 实验:非GTID 一主多从变级联架构
  5. SpringBoot + Layui +Mybatis-plus实现简单后台管理系统(内置安全过滤器)
  6. 开发阶段,将SpringBoot应用快速部署到K8S
  7. 遍历出字母A-Z(a-z)的四种方式
  8. 网络编程-python实现-TCP(1.1.3)
  9. Python基础编程——数据类型
  10. C#中打印拼接的字符串