[容易]在二叉查找树中插入节点

题目来源:http://www.lintcode.com/zh-cn/problem/insert-node-in-a-binary-search-tree/

C++版 VS2012测试通过:

 1 //#include <iostream>
 2 //#include <vector>
 3 //#include <queue>
 4 //#include <algorithm>
 5 //using namespace std;
 6 //
 7 //class TreeNode {
 8 //public:
 9 //    int val;
10 //    TreeNode *left, *right;
11 //    TreeNode(int val=-1) {
12 //    this->val = val;
13 //    this->left = this->right = NULL;
14 //  }
15 //};
16
17 //以前序遍历创建二叉树
18 //输入21##43###
19 //void CreateBiTree(TreeNode **T)//*T是指向BiTNode的指针
20 //{
21 //    *T=new TreeNode;
22 //    if(*T==NULL)//如果*T还是指向NULL,表示内存分配失败,退出程序
23 //        exit(OVERFLOW);
24 //    char ch;
25 //    cin>>ch;
26 //    if(ch==‘#‘)
27 //        *T=NULL;
28 //    else
29 //    {
30 //        (*T)->val=ch-‘0‘;//*T指向的节点的data分配内容,即生成根节点
31 //        CreateBiTree(&((*T)->left));//创建&(*T)->lchild临时变量,传入CreateBiTree,构造左子树
32 //        CreateBiTree(&((*T)->right));//创建&(*T)->rchild临时变量,传入CreateBiTree,构造右子树
33 //    }
34 //}
35
36 class Solution {
37 public:
38     /**
39      * @param root: The root of the binary search tree.
40      * @param node: insert this node into the binary search tree
41      * @return: The root of the new binary search tree.
42      */
43     TreeNode* insertNode(TreeNode* root, TreeNode* node) {
44         // write your code here
45       if (root == NULL) {
46       return node;
47         }
48         if (node->val < root->val) {
49             root->left = insertNode(root->left, node);
50             return root;
51         }
52         root->right = insertNode(root->right, node);
53         return root;
54     }
55 };
56
57 //测试
58 //int main()
59 //{
60 //    Solution s;
61 //    TreeNode **pp;//定义指向BiTNode的二级指针pp
62 //    TreeNode *p;//定义指向BiTNode的指针p
63 //    pp=&p;//pp指向p
64 //    p=NULL;//初始化p指向NULL
65 //    CreateBiTree(pp);//传入指向p的地址,创建二叉树
66
67 //    TreeNode *n=new TreeNode;//定义指向BiTNode的指针n作为插入的节点
68 //    n->val=6;
69 //    TreeNode *r;
70 //    r=s.insertNode(*pp,n);//插入结点n
71
72 //    //检查插入是否正确,这里的测试方法有点傻...
73 //    cout<<r->val;//输出根节点值
74 //    cout<<endl;
75 //    cout<<r->left->val;//输出左子数值
76 //    cout<<endl;
77 //    cout<<r->right->val<<" "<<r->right->left->val<<" "<<r->right->right->val;//输出右子数值
78 //    cout<<endl;
79 //}

Python2.7版 spider测试通过:

时间: 2024-10-06 01:04:15

[容易]在二叉查找树中插入节点的相关文章

lintcode 容易题:Insert Node in a Binary Search Tree 在二叉查找树中插入节点

题目:  在二叉查找树中插入节点 给定一棵二叉查找树和一个新的树节点,将节点插入到树中. 你需要保证该树仍然是一棵二叉查找树.  样例 给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 挑战 能否不使用递归? 解题: 递归的方法比较简单 Java程序: /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public

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

题目 在二叉查找树中插入节点 给定一棵二叉查找树和一个新的树节点,将节点插入到树中. 你需要保证该树仍然是一棵二叉查找树. 样例 给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2 2 / \ / 1 4 --> 1 4 / / \ 3 3 6 分析 递归和非递归两种方法实现. Python代码 """ Definition of TreeNode: class TreeNode: def __init__(self, val): self.val

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

原题网址:http://www.lintcode.com/zh-cn/problem/insert-node-in-a-binary-search-tree/ 给定一棵二叉查找树和一个新的树节点,将节点插入到树中. 你需要保证该树仍然是一棵二叉查找树. 注意事项 You can assume there is no duplicate values in this tree + node. 您在真实的面试中是否遇到过这个题? Yes 样例 给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可

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

题目: 给定一棵二叉查找树和一个新的树节点,将节点插入到树中. 你需要保证该树仍然是一棵二叉查找树 样例 给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2 2 / \ / 1 4 --> 1 4 / / \ 3 3 6 挑战 能否不使用递归? /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val)

在二叉查找树中插入节点

给定一棵二叉查找树和一个新的树节点,将节点插入到树中. 你需要保证该树仍然是一棵二叉查找树. 给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2 2 / \ / 1 4 --> 1 4 / / \ 3 3 6 二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树. 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值: (2)若右子树不空

双向链表(1) - 基本介绍以及插入节点

双向链表(doubly linked list - DLL)的操作,与单链表很大程度上有相似之处.在开始本篇文章前,可以先回顾下单链表的类似操作. 参考单链表系列中的这两篇文章:"链表(1) - 介绍", "链表(3) - 插入节点". 一个双向链表包含一个额外的指针, 称之为前向指针(prev pointer),与单链表中的后向指针(next pointer)一起来标识一个节点. 下面是使用C++代码来表示一个DLL的例子: //双向链表中的节点元素 struct

二叉查找树中节点的删除

二叉查找树重要性质: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值:  (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值: (3)左.右子树也分别为二叉排序树: 现有,如下一棵二叉查找树. (图1) 现在,若要删除图1中,任意节点,需要考虑如下三种情况: (1)需要删除的节点下并没有其他子节点. (2)需要删除的节点下有一个子节点(左或右). (3)需要删除的节点下有两个子节点(既左右节点都存在). 第一种情况直接删除即可,下面,直接讨论第二种情况. 若我们要删除

[javaSE] 数据结构(二叉查找树-插入节点)

二叉查找树(Binary Search Tree),又被称为二叉搜索树,它是特殊的二叉树,左子树的节点值小于右子树的节点值. 定义二叉查找树 定义二叉树BSTree,它保护了二叉树的根节点BSTNode类型的mRoot,定义内部类BSTNode 包含二叉树的几个基本信息: key——关键字用来对二叉查找树的节点进行排序 left——指向当前节点的左孩子 right——指向当前节点的右孩子 parent——指向当前节点的父节点 定义插入节点方法insert(T key),参数:T key要插入的对

链表中插入一个节点的三种情况

在链表中插入一个元素可以分为三种情况: 1.在节点的时候 2.在链表中间的任意位置 3.在链表的最后位置,也可以认为这种情况为追加(这个就留到追加的时候来实现) 下面是代码的实现 SN *Insert_S_Node( SN *head ) /* 传入的参数是被插入链表中的头指针 */ { SN *Insert_Node=NULL, *Dest_Node = NULL; /* Insert_Node是将要做成的新链表中的节点 Dest_Node是要插入的节点*/ INT32 OSM = 1, i3