二叉树的相关在线编程(python)

问题一:

  输入一个整数数组,
  判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。
  假设输入的数组的任意两个数字都互不相同。

正确的后序遍历结果:


sequence = [37, 35, 51, 47, 59, 73, 93, 98, 87, 61]

 

python源码:
复制代码
 1 class Solution:
 2     def VerifySquenceOfBST(self, sequence):
 3         # write code here
 4         if sequence == None or len(sequence) == 0:
 5             return False
 6         length = len(sequence)
 7         root = sequence[length - 1]
 8 
 9         # 在二叉搜索 树中 左子树节点小于根节点   (应该是二叉排序树)
10         for i in range(length):  # 获得左右的分叉口
11             if sequence[i] > root:
12                 break
13 
14         # 二叉搜索树中右子树的节点都大于根节点
15         for j in range(i, length):
16             if sequence[j] < root:
17                 return False
18 
19         # 判断左子树是否为二叉树
20         left = True
21         if i > 0:
22             left = self.VerifySquenceOfBST(sequence[0:i])
23 
24         # 判断 右子树是否为二叉树
25         right = True
26         if i < length - 1:
27             right = self.VerifySquenceOfBST(sequence[i:-1])
28 
29         return left and right
30 
31 
32 if __name__ == '__main__':
33     s = Solution()
34     # sequence = [37, 35, 51, 47, 59, 73, 93, 98, 61, 87]   # 错误的二叉排序树的后续遍历
35     sequence = [37, 35, 51, 47, 59, 73, 93, 98, 87, 61]     # 正确的二叉排序树的后续遍历
36     print(s.VerifySquenceOfBST(sequence))
View Code
复制代码

 

问题二: 

  

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

复制代码
 1 class TreeNode:
 2     def __init__(self, x):
 3         self.val = x
 4         self.left = None
 5         self.right = None
 6 
 7 
 8 class Solution:
 9     def HasSubtree(self, pRoot1, pRoot2):  # 判断是否有子树
10         if pRoot1 == None or pRoot2 == None:
11             return False
12 
13         result = False
14         if pRoot1.val == pRoot2.val:  # 根节点相等,进行下一步
15             result = self.IsSubtree(pRoot1, pRoot2) # 判断子节点是否“相等”
16 
17         if result == False:
18             res1 = self.HasSubtree(pRoot1.left, pRoot2)
19             res2 = self.HasSubtree(pRoot1.right, pRoot2)
20             result = res1 or res2
21 
22         return result
23 
24     def IsSubtree(self, pRoot1, pRoot2):
25         if pRoot2 == None:
26             return True
27         if pRoot1 == None:
28             return False
29         if pRoot1.val == pRoot2.val:
30             leftt = self.IsSubtree(pRoot1.left, pRoot2.left)
31             rightt = self.IsSubtree(pRoot1.right, pRoot2.right)
32             return leftt and rightt
33         return False
34 
35     def getBSTwithPreTin(self, pre, tin):  # 最终确定树的形状,使用object的形式存储
36         if len(pre) == 0 | len(tin) == 0:  # 任何一个为空树,则返回空
37             return None  # 直接跳出代码
38         root = TreeNode(pre[0])  # 前序遍历直接找到根节点(第一个元素就是根节点)
39         for i, item in enumerate(tin):  # 序号和元素,将中序遍历拆分成左右两支
40             if root.val == item:
41                 root.left = self.getBSTwithPreTin(pre[1:i + 1], tin[:i])
42                 root.right = self.getBSTwithPreTin(pre[i + 1:], tin[i + 1:])
43                 return root
44 
45 
46 if __name__ == '__main__':
47     solution = Solution()
48 
49     preorder_seq = [1, 2, 4, 7, 3, 5, 6, 8]  # 前序遍历
50     middleorder_seq = [4, 7, 2, 1, 5, 3, 8, 6]  # 中序遍历
51     treeA = solution.getBSTwithPreTin(preorder_seq, middleorder_seq)
52 
53     preorder_seq = [1, 2, 3]
54     middleorder_seq = [2, 1, 3]
55     treeB = solution.getBSTwithPreTin(preorder_seq, middleorder_seq)
56     
57     print(solution.HasSubtree(treeA, treeB))
View Code
复制代码

 

 

 

posted on   周健康  阅读(486)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗

导航

< 2025年3月 >
23 24 25 26 27 28 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 31 1 2 3 4 5
点击右上角即可分享
微信分享提示