网站维护主要工作内容,一个一起做网站,金融网站模版,模板网推荐提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣1379. 找出克隆二叉树中的相同节点二、力扣LCR 143. 子结构判断三、力扣110. 平衡二叉树四、力扣250. 统计同值子树 前言 有些题目#xff0c;你按照拍… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 前言一、力扣1379. 找出克隆二叉树中的相同节点二、力扣LCR 143. 子结构判断三、力扣110. 平衡二叉树四、力扣250. 统计同值子树 前言 有些题目你按照拍脑袋的方式去做可能发现需要在递归代码中调用其他递归函数计算字数的信息。一般来说出现这种情况时你可以考虑用后序遍历的思维方式来优化算法利用后序遍历传递子树的信息避免过高的时间复杂度
一、力扣1379. 找出克隆二叉树中的相同节点
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/class Solution {TreeNode res null;public final TreeNode getTargetCopy(final TreeNode original, final TreeNode cloned, final TreeNode target) {fun(original,cloned,target);return res;}public void fun(TreeNode original, TreeNode cloned, TreeNode target){if(original null){return;}if(original target){res cloned;return;}fun(original.left,cloned.left,target);fun(original.right,cloned.right,target);}
}二、力扣LCR 143. 子结构判断
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/
class Solution {public boolean isSubStructure(TreeNode A, TreeNode B) {if(B null){return false;}if(A null){return B null;}if(fun(A,B)){return true;}return isSubStructure(A.left,B) || isSubStructure(A.right,B);}public boolean fun(TreeNode A , TreeNode B){if (B null) {return true;}if (B ! null A null) {return false;}if(A.val ! B.val){return false;}return fun(A.left,B.left) fun(A.right,B.right);}
}三、力扣110. 平衡二叉树
/*** 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;* }* }*/
class Solution {boolean flag true;public boolean isBalanced(TreeNode root) {fun(root);return flag;}public int fun(TreeNode root){if(root null){return 0;}int l fun(root.left);int r fun(root.right);if(Math.abs(l-r) 1){flag false;}return l r ? l 1:r 1;}
}四、力扣250. 统计同值子树
/*** 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;* }* }*/
class Solution {public int countUnivalSubtrees(TreeNode root) {if(root null){return 0;}int cur 0;if(fun(root,root.val)){cur 1;}int l countUnivalSubtrees(root.left);int r countUnivalSubtrees(root.right);return cur l r;}public boolean fun(TreeNode root,int val){if(root null){return true;}if(root.val ! val){return false;}return fun(root.left,val) fun(root.right,val);}
}