1.合并二叉树
给你两棵二叉树: root1 和 root2 。
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。
返回合并后的二叉树。
注意: 合并过程必须从两个树的根节点开始。
把root2合并到root1
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
if ((root1 == null) && (root2 == null)) {
return null;
}
if ((root1 != null) && (root2 == null)) {
return root1;
}
if ((root1 == null) && (root2 != null)) {
return root2;
}
if ((root1 != null) && (root2 != null)) {
TreeNode t = new TreeNode();
t.val = root1.val + root2.val;
t.left = mergeTrees(root1.left, root2.left);
t.right = mergeTrees(root1.right, root2.right);
return t;
}
if (root2.left != null) {
root1.left = mergeTrees(root1.left, root2.left);
}
if (root2.right != null) {
root1.right = mergeTrees(root1.right, root2.right);
}
return root1;
}
}
判断二叉树是否相等
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==q&&p==null){
return true;
}
if(p==null||q==null){
return false;
}
if(p.val!=q.val){
return false;
}
return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
}
}
二叉树这两个节点的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
说明:
所有节点的值都是唯一的。
p、q 为不同节点且均存在于给定的二叉树中。
输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出: 3
解释: 节点 5 和节点 1 的最近公共祖先是节点 3。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null){
return null;
}
if(root==p||root==q){
return root;
}
TreeNode left = lowestCommonAncestor(root.left,p,q);
TreeNode right = lowestCommonAncestor(root.right,p,q);
if(left!=null&&right!=null){
return root;
}
if(left==null){
return right;
}
return left;
}
}
对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
巧妙的传入两个参数root
class Solution {
public boolean isSymmetric(TreeNode root) {
return isDuiCheng(root,root);
}
public boolean isDuiCheng(TreeNode q,TreeNode p) {
if(q==null&&p==null){
return true;
}
if(q==null||p==null){
return false;
}
if(q.val!=p.val){
return false;
}
return isDuiCheng(q.left,p.right)&&isDuiCheng(q.right,p.left);
}
}
网友评论