Python对称的二叉树

本文阅读 1 分钟
首页 Python笔记 正文

分为递归和非递归的两种方式,思想是一样的。主要就是把叶子节点的None节点也加入到遍历当中。按照前序遍历二叉树,存入一个序列中。然后按照和前序遍历对应的先父节点,然后右子节点,最后左子节点遍历二叉树,存入一个序列。如果前后两个序列相等,那么说明二叉树是对称的。

  1. '''
  2. 请实现一个函数,用来判断一颗二叉树是不是对称的。
  3. 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
  4. '''
  5. # -*- coding:utf-8 -*-
  6. class TreeNode:
  7. def __init__(self, x):
  8. self.val = x
  9. self.left = None
  10. self.right = None
  11. class Solution:
  12. def isSymmetrical(self, pRoot):
  13. return self.selfIsSymmetrical(pRoot, pRoot)
  14. def selfIsSymmetrical(self, pRoot1, pRoot2):
  15. if pRoot1 == None and pRoot2 == None:
  16. return True
  17. if pRoot1 == None or pRoot2 == None:
  18. return False
  19. if pRoot1.val != pRoot2.val:
  20. return False
  21. return self.selfIsSymmetrical(pRoot1.left, pRoot2.right) and self.selfIsSymmetrical(pRoot1.right, pRoot2.left)
  22. # 非递归实现判断二叉树是否对称
  23. # 利用前序遍历
  24. class Solution2:
  25. def isSymmetrical(self, pRoot):
  26. preList = self.preOrder(pRoot)
  27. mirrorList = self.mirrorPreOrder(pRoot)
  28. if preList == mirrorList:
  29. return True
  30. return False
  31. def preOrder(self, pRoot):
  32. if pRoot == None:
  33. return [None]
  34. treeStack = []
  35. output = []
  36. pNode = pRoot
  37. while pNode or len(treeStack) > 0:
  38. while pNode:
  39. treeStack.append(pNode)
  40. output.append(pNode.val)
  41. pNode = pNode.left
  42. if not pNode:
  43. output.append(None)
  44. if len(treeStack):
  45. pNode = treeStack.pop()
  46. pNode = pNode.right
  47. if not pNode:
  48. output.append(None)
  49. return output
  50. def mirrorPreOrder(self, pRoot):
  51. if pRoot == None:
  52. return [None]
  53. treeStack = []
  54. output = []
  55. pNode = pRoot
  56. while pNode or len(treeStack) > 0:
  57. while pNode:
  58. treeStack.append(pNode)
  59. output.append(pNode.val)
  60. pNode = pNode.right
  61. if not pNode:
  62. output.append(None)
  63. if len(treeStack):
  64. pNode = treeStack.pop()
  65. pNode = pNode.left
  66. if not pNode:
  67. output.append(None)
  68. return output
  69. pNode1 = TreeNode(8)
  70. pNode2 = TreeNode(6)
  71. pNode3 = TreeNode(10)
  72. pNode4 = TreeNode(5)
  73. pNode5 = TreeNode(7)
  74. pNode6 = TreeNode(9)
  75. pNode7 = TreeNode(11)
  76. pNode1.left = pNode2
  77. pNode1.right = pNode3
  78. pNode2.left = pNode4
  79. pNode2.right = pNode5
  80. pNode3.left = pNode6
  81. pNode3.right = pNode7
  82. S = Solution2()
  83. result = S.isSymmetrical(pNode1)
  84. print(result)
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

Python二叉树的下一个结点
« 上一篇 01-21
Python把二叉树打印成多行
下一篇 » 01-21

发表评论

惪特博客
  • 文章总数:
    18498 篇
  • 评论总数:
    53264 条
  • 标签总数:
    8869 个
  • 总浏览量:
    21828448 次
  • 最后更新:
    6天前

最多点赞

随便看看

标签TAG