原题网址: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之后这棵二叉查找树可以是这样的:
2 2
/ \ / \
1 4 --> 1 4
/ / \
3 3 6
能否不使用递归?
1 #include <iostream> 2 #include <vector> 3 #include <math.h> 4 #include <string> 5 #include <algorithm> 6 using namespace std; 7 8 class TreeNode 9 { 10 public: 11 int val; 12 TreeNode *left, *right; 13 TreeNode(int val) 14 { 15 this->val = val; 16 this->left = this->right = NULL; 17 } 18 19 20 TreeNode * insertNode(TreeNode * root, TreeNode * node) //插入位置需要进行判断; 21 { 22 int nodeValue=node->val; 23 TreeNode *p=new TreeNode(nodeValue); 24 25 if (root==NULL) 26 { 27 root=p; 28 return root; 29 } 30 TreeNode *tempp=root; 31 while(tempp!=NULL) //注意循环终止条件,无论怎么判断tempp都不可能为NULL,所以要用return语句结束函数的执行; 32 { 33 if (nodeValue<tempp->val) 34 { 35 if (tempp->left==NULL) 36 { 37 tempp->left=p; 38 return root; 39 } 40 else 41 { 42 tempp=tempp->left; 43 } 44 } 45 else 46 { 47 if (tempp->right==NULL) 48 { 49 tempp->right=p; 50 return root; 51 } 52 else 53 { 54 tempp=tempp->right; 55 } 56 } 57 } 58 59 } 60 61 TreeNode * insertnode(TreeNode * root, TreeNode * node); 62 }; 63
64 TreeNode* TreeNode::insertnode(TreeNode * root, TreeNode * node) //使用递归; 65 { 66 if (root==NULL) 67 { 68 root=node; 69 return root; 70 } 71 if (node->val<root->val) 72 { 73 root->left=insertnode(root->left,node); 74 } 75 else 76 { 77 root->right=insertnode(root->right,node); 78 } 79 return root; 80 }
参考: