Same Tree
来源:互联网 发布:淘宝app用户体验报告 编辑:程序博客网 时间:2024/06/03 21:17
leetcode第100题,典型的二叉树的问题,判断两个数是否为相同的二叉树,要求节点数据和树的结构必须完全相同。
一开始考虑的是进行树的遍历,因为二叉树的前序遍历加上中序遍历或者后序遍历加上中序遍历可以唯一确定二叉树结构,因此考虑先进行两种遍历,然后比较结果就行了。但是这样做有一个bug,那就是如果元素相同,就无法区分元素是在哪个节点上了,这样一来,遍历结果就不能确定结果了。
贴上这种笨办法的代码
def isSameTree( p, q): """ :type p: TreeNode :type q: TreeNode :rtype: bool """ if p == None and q == None: return True if (p == None and q!=None) or (p!=None and q == None): return False def in_Order(root,l): if root.left != None: in_Order(root.left,l) if root.val == None: l.append(0) else: l.append(root.val) if root.right != None: in_Order(root.right,l) def pre_Order(root,l): if root.val == None: l.append(0) else: l.append(root.val) if root.left != None: pre_Order(root.left,l) if root.right != None: pre_Order(root.right,l) def campare(l1,l2): n1 = len(l1) n2 = len(l2) if n1 != n2: return False for i in range(n1): if l1[i] == l2[i]: continue else: return False return True preOrder1 = [] inOrder1 = [] preOrder2 = [] inOrder2 = [] in_Order(p,inOrder1) in_Order(q,inOrder2) pre_Order(p,preOrder1) pre_Order(q,preOrder2) if campare(inOrder1,inOrder2) and campare(preOrder1,preOrder2): flag = True else: flag = False return flag
既然如此,采取另一种方法,一边递归遍历,一边进行比较,这样就可以确保能够完全相同了。
这样做相当于是两棵树进行深搜,需要一定的技巧,首先对两棵树搜索,输入参数肯定就是两棵树的节点,上来先判断两棵树都是空树的情况。而后进行深搜,搜索时先比较节点的值是否相等,如果不等就直接返回False,如果相等继续向下遍历。
要注意的是,有时候有点节点是空的,这时候需要用到hasattr函数,确保该节点有值的属性,如果没有,这说明结构已经不一样了,就可以直接返回False了。
# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution(object): def isSameTree(self, p, q): """ :type p: TreeNode :type q: TreeNode :rtype: bool """ if not (p or q): return True elif (hasattr(p, 'val') and hasattr(q, 'val')) and p.val == q.val: if self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right): return True else: return False else: return False
0 0
- Same Tree
- Same Tree
- Same Tree
- Same Tree
- Same Tree
- Same Tree
- Same Tree
- Same Tree
- Same Tree
- Same Tree
- Same tree
- Same Tree
- Same Tree
- Same Tree
- Same Tree
- Same Tree
- Same Tree
- Same Tree
- 机器学习中的相似性度量 (多种几何距离定义)
- linux ubuntu 搭建lamp、虚拟主机配置等
- [LeetCode] 42. Trapping Rain Water
- java面试题
- 【杭电2005】第几天?
- Same Tree
- 图片加载的优化 --- 实现图片的缓存、本地内存及网络的三重筛选之后的加载
- virtio-net pci config space
- Nyist27 水池数目
- Update与LateUpdate区别
- Java内容回顾
- mac下安装OCLint、xctool、及配置环境变量
- [Array]Minimum Size Subarray Sum
- Codeforces - Educational Codeforces Round 14B - s-palindrome(模拟)