1. 程式人生 > >Insert into a Binary Search Tree 二叉搜尋樹中的插入操作

Insert into a Binary Search Tree 二叉搜尋樹中的插入操作

給定二叉搜尋樹(BST)的根節點和要插入樹中的值,將值插入二叉搜尋樹。 返回插入後二叉搜尋樹的根節點。 保證原始二叉搜尋樹中不存在新值。

注意,可能存在多種有效的插入方式,只要樹在插入後仍保持為二叉搜尋樹即可。 你可以返回任意有效的結果。

例如, 

給定二叉搜尋樹:

        4
       / \
      2   7
     / \
    1   3

和 插入的值: 5

你可以返回這個二叉搜尋樹:

         4
       /   \
      2     7
     / \   /
    1   3 5

或者這個樹也是有效的:

         5
       /   \
      2     7
     / \   
    1   3
         \
          4

思路:因為二叉樹滿足:左節點值<根節點值,右節點值>根節點值,所以我們可以不斷用val與當前的節點的值進行判斷,如果比當前節點小,就移到左子節點,否則就移到右子節點。。。一直迴圈到當前節點是空節點,那麼剛好就是帶插入的節點,我們插入對應的位置就行了。

參考程式碼:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) {
	TreeNode* res = root;
	TreeNode* tmp = res;
	TreeNode* parentNode = tmp;
	while (tmp) {
		parentNode = tmp;
		if (val > tmp->val) tmp = tmp->right;
		else tmp = tmp->left;
	}
	if (val > parentNode->val) {
		TreeNode* node = new TreeNode(val);
		parentNode->right = node;
	}
	else {
		TreeNode* node = new TreeNode(val);
		parentNode->left = node;
	}
	return res;        
    }
};