zoukankan      html  css  js  c++  java
  • 二叉树的相关在线编程(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
     
  • 相关阅读:
    简单构建一个xmlhttp对象池合理创建和使用xmlhttp对象
    iBATIS.net获取运行时sql语句
    不做自了汉,大家好才是真的好
    sql查询,nolock写还是不写,这是一个问题
    Sublime Text 2 快捷键用法大全(转)
    javascript设计模式入门之策略模式
    记一次外单前端页面编写小结
    代码驾驭
    一次项目总结,内容设置页面
    【百度地图API】今日小年大进步,齐头共进贺佳节——API优化升级上线,不再增加内存消耗
  • 原文地址:https://www.cnblogs.com/Mufasa/p/10571406.html
Copyright © 2011-2022 走看看