Leetcode 701.二叉搜索树中的插入操作

701. 二叉搜索树中的插入操作

题目

给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。

注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。

例如,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
给定二叉搜索树:

4
/ \
2 7
/ \
1 3

和 插入的值: 5
你可以返回这个二叉搜索树:

4
/ \
2 7
/ \ /
1 3 5
或者这个树也是有效的:

5
/ \
2 7
/ \
1 3
\
4

方法

方法1:非递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 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
"""
z=TreeNode(val)
x=root
while x:
y=x
if val<x.val:
x=x.left
else:
x=x.right

if not y:
root=x
elif z.val<y.val:
y.left=z
else:
y.right=z
return root

方法2:递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 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 root.val==val:
return root
if val<root.val:
root.left=self.insertIntoBST(root.left,val)
else:
root.right=self.insertIntoBST(root.right,val)
return root