701. Insert into a Binary Search Tree(python+cpp)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21275321/article/details/84074250

题目:

Given the root node of a binary search tree (BST) and a value to be inserted into the tree, insert the value into the BST. Return the root node of the BST after the insertion. It is guaranteed that the new value does not exist in the original BST.
Note that there may exist multiple valid ways for the insertion, as long as the tree remains a BST after insertion. You can return any of them.
For example,

Given the tree:
        4
       / \
      2   7
     / \
    1   3 
And the value to insert: 5 

You can return this binary search tree:

         4
       /   \
      2     7
     / \   /
    1   3 5 

This tree is also valid:

         5
       /   \
      2     7
     / \   
    1   3
         \
          4

解释:
把指定的值插入到BST中,二叉搜索树的插入算法,
我的想法是不改变树的整体结构,如果val大于当前结点,对它的右子树进行操作,否则对它的左子树进行操作。
python代码:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def insertIntoBST(self, root, val):
        """
        :type root: TreeNode
        :type val: int
        :rtype: TreeNode
        """
        if not root:
            return TreeNode(val)
        #不需要判断子树是否存在
        if val<root.val:
            root.left=self.insertIntoBST(root.left,val)
        elif val>root.val:
            root.right=self.insertIntoBST(root.right,val)
        return root

c++代码:

/**
 * 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) {
        if (!root)
        {
            TreeNode *node=new TreeNode(val);
            return node;
        }
        if (val<root->val)
            root->left=insertIntoBST(root->left,val);
        else
            root->right=insertIntoBST(root->right,val);
        return root;
    }
};

总结:
注意,这里的dfs不需要在进入函数之前判断子树是否存在,因为在函数中处理了root为空的情况,而不是像以前一样直接返回None。

猜你喜欢

转载自blog.csdn.net/qq_21275321/article/details/84074250