LeetCode-222
题目描述:
解题思路:
使用队列存储完全二叉树的节点,每次向队列中存储一个节点size就++。
首次插入根节点后,当队列不为空,则出队,判断出队的节点是否含有左右子树,有则入队,且size++。
代码:
class Solution {
public int countNodes(TreeNode root) {
int size=0;
Queue<TreeNode> queue=new LinkedList<>();
if(root!=null){
queue.offer(root);
size++;
}
while (! queue.isEmpty()){
TreeNode cur = queue.poll();
if(cur.left!=null){
queue.offer(cur.left);
size++;
}
if(cur.right!=null){
queue.offer(cur.right);
size++;
}
else {
break;
}
}
return size;
}
}
LeetCode100:
题目描述:
解题思路:
对于两颗树来说,先判断根节点是否一致,判断完根节点后,递归的去判断左子树和右子树是否相等。
代码:
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p != null && q==null || p==null && q!=null){
return false;
}
if(p==null && q==null){
return true;
}
if(p.val!=q.val){
return false;
}
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}
}
LeetCode572:
题目描述:
解题思路:
将LeetCode100的代码作为一个判断 两个树是否相等的方法。
采用递归的方法判断是不是子树。root.left和root.right和subRoot的子树关系。
代码:
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p != null && q==null || p==null && q!=null){
return false;
}
if(p==null && q==null){
return true;
}
if(p.val!=q.val){
return false;
}
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
if(root==null && subRoot!=null || root!=null && subRoot==null){
return false;
}
if(isSameTree(root,subRoot)){
return true;
}
return isSubtree(root.left,subRoot) || isSubtree(root.right,subRoot);
}
}