LintCode(85)在二叉查找树中插入节点
2016-06-15 21:41
405 查看
题目
在二叉查找树中插入节点
给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。
样例
给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的:
2 2 / \ / \ 1 4 --> 1 4 / / \ 3 3 6
分析
递归和非递归两种方法实现。Python代码
""" Definition of TreeNode: class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, None """ class Solution: """ @param root: The root of the binary search tree. @param node: insert this node into the binary search tree. @return: The root of the new binary search tree. """ def insertNode1(self, root, node): # write your code here if root is None: root = node return root if node.val < root.val: root.left = self.insertNode1(root.left, node) else: root.right = self.insertNode1(root.left, node) return root def insertNode(self, root, node): # write your code here if root is None: root = node return root t = root while t is not None: if node.val < t.val: if t.left is None: t.left = node return root else: t = t.left continue else: if t.right is None: t.right = node return root else: t = t.right continue return root
GitHub -- Python代码
C++代码
/** * 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 root: The root of the binary search tree. * @param node: insert this node into the binary search tree * @return: The root of the new binary search tree. */ TreeNode* insertNode1(TreeNode* root, TreeNode* node) { // write your code here if(root == NULL) { root = node; return root; }//if if(node->val < root->val) { if(root->left == NULL) { root->left = node; }else{ root->left = insertNode1(root->left, node); }//else }else{ if(root->right == NULL) { root->right = node; }else{ root->right = insertNode1(root->right, node); }//else }//else return root; } //非递归 TreeNode* insertNode(TreeNode* root, TreeNode* node) { // write your code here if(root == NULL) { root = node; return root; }//if TreeNode *t = root; while(t != NULL) { if(node->val < t->val) { if(t->left == NULL) { t->left = node; return root; }else{ t = t->left;; continue; }//else }//if else{ if(t->right == NULL) { t->right = node; return root; }else{ t = t->right; continue; }//else }//else }//while return root; } };
GitHub -- C++代码
相关文章推荐
- 剑指offer面试题:替换空格(将字符串每个空格替换为%20)
- 作业九
- C#中的委托
- ORB特征原理(浅显易懂)
- java memcachedClient 存储有效期方法,切记
- 复杂运维场景下,如何实现分钟级的故障根因定位
- Glide全解析
- 数据结构之AVL树
- Java语言编写矩阵转置
- 个人代码托管和版本控制
- 重载函数 数组
- linux 系统负载高 如何检查
- SQL入门
- BZOJ 1458 士兵占领
- cocos2d-x v2.2 IOS工程支持64-bit 遇坑记录
- Jenkins中集成python,支持参数生成Makefile文件
- hdu 1576 A/B(乘法逆元,扩展欧几里得)
- 构造回文(动态规划,递归算法)
- 【复习】servlet之过滤器
- WWW 初级教程