做者: 负雪明烛
id: fuxuemingzhu
我的博客: http://fuxuemingzhu.cn/java
[LeetCode]node
题目地址:https://leetcode.com/problems/same-tree/python
Total Accepted: 126017 Total Submissions: 291619 Difficulty: Easy算法
Given two binary trees, write a function to check if they are the same or not.ide
Two binary trees are considered the same if they are structurally identical and the nodes have the same value.spa
Example 1:code
Input: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] Output: true
Example 2:递归
Input: 1 1 / \ 2 2 [1,2], [1,null,2] Output: false
Example 3:leetcode
Input: 1 1 / \ / \ 2 1 1 2 [1,2,1], [1,1,2] Output: false
判断两棵二叉树是否彻底相等。get
这道题是树的题目,属于最基本的树遍历的问题。
问题要求就是判断两个树是否是同样,基于先序,中序或者后序遍历均可以作完成,由于对遍历顺序没有要求。
这里咱们主要考虑一下结束条件,若是两个结点都是null,也就是到头了,那么返回true。若是其中一个是null,说明在一棵树上结点到头,另外一棵树结点还没结束,即树不相同,或者两个结点都非空,而且结点值不相同,返回false。最后递归处理两个结点的左右子树,返回左右子树递归的与结果便可。
这里使用的是先序遍历,算法的复杂度跟遍历是一致的,若是使用递归,时间复杂度是O(n),空间复杂度是O(logn)。代码以下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if(p==null && q==null){ return true; } if(p==null || q==null){//注意是在p/q都不为空的状况下有一个为空,说明另一个不为空 return false; } if(p.val!=q.val){//注意是不相等返回False,相等的话须要继续进行子节点的判断 return false; } return isSameTree(p.left,q.left) && isSameTree(p.right,q.right); } }
AC:0ms
递归问题最终要的是终止条件!!!必定要万无一失。
二刷,python。
两年前的我居然写了这么多啊,如今写一个Python版本的。
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def isSameTree(self, p, q): """ :type p: TreeNode :type q: TreeNode :rtype: bool """ if not p and not q: return True if not p or not q: return False return p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
2016/4/30 1:17:33 2018 年 10 月 8 日 —— 终于开学了。 2018 年 11 月 14 日 —— 很严重的雾霾