LintCode(S)二叉查找树插入节点

原创 2017年01月03日 09:20:52

在二叉查找树中插入节点

描述
笔记
数据
评测
给定一棵二叉查找树和一个新的树节点,将节点插入到树中。

你需要保证该树仍然是一棵二叉查找树。

您在真实的面试中是否遇到过这个题? Yes
样例
给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的:

2 2
/ \ / \
1 4 –> 1 4
/ / \
3 3 6
挑战
能否不使用递归?

递归:

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* insertNode(TreeNode* root, TreeNode* node) {

     if(root ==NULL) root=node;
     if(node->val<root->val) root->left=insertNode(root->left,node);
     if(node->val>root->val) root->right=insertNode(root->right,node);
        return root;
    }
};
非递归:
 TreeNode* insertNode(TreeNode* root, TreeNode* node) {
        if(root==NULL) {root=node;return root;}
         TreeNode *p=root;
       while(p){
           if(node->val<p->val){
               if(p->left==NULL){ p->left=node;return root;}
               else p=(TreeNode*)p->left;
           }
           else{ 
               if(p->right==NULL) {p->right=node;return root;}
               else  p=(TreeNode*)p->right;

           }
       }
        return root;
    }

最初我的非递归写法如下:

 TreeNode* insertNode(TreeNode* root, TreeNode* node) {
        if(root==NULL) {root=node;return root;}
         TreeNode *p=root;
       while(p){
           if(node->val<p->val) p=(TreeNode*)p->left;
            else    p=(TreeNode*)p->right; 
       }
       p=node;
        return root;
    }

这种写法是错误的,比如,输入数据{2,1},3 ,正确的输出应该是{2,1,3},但是利用刚刚的算法得出的结果确是:{2,1}
这是因为p=node,只是使p指向了另一个节点,但是树原来的结构并没有发生变化。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

LintCode:在二叉查找树中插入节点

[LintCode:在二叉查找树中插入节点](http://www.lintcode.com/zh-cn/problem/insert-node-in-a-binary-search-tree/)""...

LintCode(85)在二叉查找树中插入节点

题目  在二叉查找树中插入节点 给定一棵二叉查找树和一个新的树节点,将节点插入到树中。 你需要保证该树仍然是一棵二叉查找树。 样例 给出如...
  • fly_yr
  • fly_yr
  • 2016年06月15日 21:41
  • 1941

lintcode(87)删除二叉查找树的节点

Description: 给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点。如果树中没有相同值的节点,就不做任何处理。你应该保证处理之后的树仍是二叉查找树。 Explanatio...

LintCode : 删除二叉查找树的节点

删除二叉查找树的节点  描述 笔记 数据 评测 给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点。如果树中没有相同值的节点,就不做任何处理。你应该保证处理之后的树...
  • cumt_cx
  • cumt_cx
  • 2016年12月06日 20:52
  • 374

LintCode 87-删除二叉查找树的节点

本人电子系,只为一学生。心喜计算机,小编以怡情。给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点。如果树中没有相同值的节点,就不做任何处理。你应该保证处理之后的树仍是二叉查找树。 1...

**[Lintcode]Unique Binary Search Trees II 不同的二叉查找树 II

Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. ...

Lintcode 将二叉查找树转换为双链表

将二叉查找树转换成双链表描述 笔记 数据 评测 将一个二叉查找树按照中序遍历转换成双向链表。您在真实的面试中是否遇到过这个题? Yes 样例 给定一个二叉查找树:4 / \ 2...

不同的二叉查找树 II lintcode

给出n,生成所有由1...n为节点组成的不同的二叉查找树 您在真实的面试中是否遇到过这个题?  Yes 样例 给出n = 3,生成所有5种不同形态的二叉查找...

lintcode,将二叉查找树转换成双链表

将一个二叉查找树按照中序遍历转换成双向链表。 样例 给定一个二叉查找树: 4 / \ 2 5 / \ 1 3 返回 12345。解题思路:类似中序遍历的过程...
  • zsjmfy
  • zsjmfy
  • 2016年12月18日 11:28
  • 366
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LintCode(S)二叉查找树插入节点
举报原因:
原因补充:

(最多只允许输入30个字)