第一题 最大二叉树
题目描述:
https://leetcode.cn/problems/maximum-binary-tree/description/
思路:
具体代码如下:
from typing import Optional, List
from collections import deque
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def travel(self, nums: List[int], left: int, right: int) -> Optional[TreeNode]:
if left >= right:
return None
mindex = left
for i in range(left, right):
if nums[i] > nums[mindex]:
mindex = i
newNode = TreeNode(nums[mindex])
newNode.left = self.travel(nums, left, mindex)
newNode.right = self.travel(nums, mindex+1, right)
return newNode
def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:
return self.travel(nums, 0 , len(nums))
def DLR(root: TreeNode):
if not root:
print('null', end = ' ')
return
print(root.val, end = ' ')
DLR(root.left)
DLR(root.right)
def Level(root: TreeNode):
queue = deque()
queue.append(root)
while queue:
root = queue.popleft()
if root:
print(root.val, end = ' ')
if root.left or root.right:
queue.append(root.left)
queue.append(root.right)
else:
print('null', end = ' ')
if __name__ == '__main__':
obj = Solution()
nums = [3,2,1,6,0,5]
Level(obj.constructMaximumBinaryTree(nums))
第二题 合并二叉树
题目描述:
https://leetcode.cn/problems/merge-two-binary-trees/
思路:
具体代码如下:
class Solution:
def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
if not root1:
return root2
if not root2:
return root1
newNode = TreeNode(root1.val+root2.val)
newNode.left = self.mergeTrees(root1.left, root2.left)
newNode.right = self.mergeTrees(root1.right, root2.right)
return newNode
第三题 二叉搜索树中的搜索
题目描述:
https://leetcode.cn/problems/search-in-a-binary-search-tree/description/
思路:
具体代码如下:
class Solution:
def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
if not root or root.val == val:
return root
result = None
if root.val > val:
result = self.searchBST(root.left, val)
else:
result = self.searchBST(root.right, val)
return result
第四题 验证二叉搜索树
题目描述:
https://leetcode.cn/problems/validate-binary-search-tree/description/
思路:
具体代码如下
class Solution:
def __init__(self):
self.vec = list()
def travel(self, root: Optional[TreeNode]):
if not root:
return
self.travel(root.left)
self.vec.append(root.val)
self.travel(root.right)
def isValidBST(self, root: Optional[TreeNode]) -> bool:
self.travel(root)
for i in range(1, len(self.vec)):
if self.vec[i-1] >= self.vec[i]:
return False
return True