leetcode 100.相同的树
程序员文章站
2022-07-01 17:09:41
...
原题
题解
方法一 递归
方法很简单。对于两个数,判断两个根节点为空或者值相同则继续(否则返回false),之后再以同样的方式判断两个树的左分叉和右分叉是否分别“相同”。这个方法的终止条件是要么遇到值不同的节点(false),要么遇到了最末端的同时为空(true)。
本思路java代码示例:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
/*递归法
@v7fgg
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:37.2 MB, 在所有 Java 提交中击败了45.45%的用户
2020年7月30日 14:10
*/
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null&&q==null){return true;}
if(p!=null&&q!=null&&p.val==q.val){
return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
}
return false;
}
}
当然可以把复杂的if-else结构压缩成简洁的一行代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
/*
@v7fgg
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:37.2 MB, 在所有 Java 提交中击败了50.50%的用户
2020年7月30日 14:15
*/
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
return p==null&&q==null?true:p!=null&&q!=null&&p.val==q.val?isSameTree(p.left,q.left)&&isSameTree(p.right,q.right):false;
}
}
方法二 迭代法
准备两个栈,分别用于承装两个树的对应位置的结构。
本思路java代码示例:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
/*迭代法
@v7fgg
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:37.2 MB, 在所有 Java 提交中击败了41.82%的用户
2020年7月30日 15:54
*/
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
Stack<TreeNode> pstack=new Stack<>();
Stack<TreeNode> qstack=new Stack<>();
pstack.push(p);
qstack.push(q);
while(!pstack.isEmpty()){
TreeNode a=pstack.pop();
TreeNode b=qstack.pop();
if(a==null&&b==null){continue;}
if(a==null||b==null||a.val!=b.val){return false;}
//只有在有值且相等的时候才会执行下面,因此不会无限制添加
pstack.push(a.left);
pstack.push(a.right);
qstack.push(b.left);
qstack.push(b.right);
}
return true;
}
}
上一篇: android 连接远程数据库
下一篇: python练习题
推荐阅读
-
LeetCode 426. 将二叉搜索树转化为排序的双向链表(BST中序循环遍历)
-
leetcode 113 剑指offer 面试题34. 二叉树中和为某一值的路径(python3)
-
leetcode算法练习——不同的二叉搜索树
-
leetcode算法练习——不同的二叉搜索树
-
LeetCode第958题 二叉树的完全性检验
-
Leetcode刷题记录——958. 二叉树的完全性检验
-
leetcode 第 958 题:二叉树的完全性检验(C++)
-
leetcode 958 二叉树的完全性检验(超简洁写法)
-
leetcode 958. 二叉树的完全性检验(输出是否是完全二叉树 dfs/bfs每次假如队列的时候判断 值是不是sz)
-
Java实现 LeetCode 637 二叉树的层平均值(遍历树)