从现在开始每天至少刷一道题。
题库:lintcode
有些题目链接打不开,需要权限,那大家就去九章算法参考答案里找找。
Insert Node in a Binary Search Tree
题目链接
难度:easy
算法:二分法
解题思路
插入一定在树的叶子节点上。如果target大于节点值,往右子树搜索;否则,往左子树搜索。当搜索null时,说明可以找到可以插入的位置。存储插入位置之前的那个父节点。如果该父节点大于target,target是父节点的左节点,否则是右节点。
时间复杂度:O(logn)
空间复杂度:O(1)
解法
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public 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.
*/
public TreeNode insertNode(TreeNode root, TreeNode node) {
// write your code here
if(root == null){
return node;
}
TreeNode curr = root;
TreeNode last = null;
while(curr != null){
last = curr;
if(curr.val > node.val){
curr = curr.left;
}else{
curr = curr.right;
}
}
if(last !=