目录
1,获取树中节点的个数
2,获取叶子节点的个数
3,获取叶子节点的个数(2)
4,获取第K层节点的个数
5,获取二叉树的高度
6,检测值为value的元素是否存在
例题1:相同的树问题
例题2:另一棵树的子树问题
例题3:翻转二叉树
例题4:对称二叉树
1,获取树中节点的个数
public int nodeSize;public void size(TreeNode root){if(root==null){return;}nodeSize++;size(root.left);size(root.right);};
2,获取叶子节点的个数
public int leafSize;public void getLeafNodeCount(TreeNode root){if(root==null){return;}if(root.left==null&&root.right==null){leafSize++;}getLeafNodeCount(root.left);getLeafNodeCount(root.right);};
3,获取叶子节点的个数(2)
public int getLeafNodeCount1(TreeNode root){if(root==null){return 0;}if(root.left==null&&root.right==null){return 1;}return getLeafNodeCount1(root.left)+getLeafNodeCount1(root.right);};
4,获取第K层节点的个数
public int getKLevelNodeCount(TreeNode root,int k){if(root==null){return 0;}if(k==1){return 1;}return getKLevelNodeCount(root.left,k-1)+getKLevelNodeCount(root.right,k-1);};
5,获取二叉树的高度
public int getHeight(TreeNode root){if(root==null){return 0;}int leftSize =getHeight(root.left);int rightSize=getHeight(root.right);return Math.max(leftSize,rightSize)+1;};
6,检测值为value的元素是否存在
public TreeNode find(TreeNode root, int val){if(root==null){return null;}if(root.val==val){return root;}TreeNode leftVal=find(root.left,val);if(leftVal!=null){return leftVal;}TreeNode rightVal=find(root.right,val);if(rightVal!=null){return rightVal;}return null;};
例题1:相同的树问题
100. 相同的树 - 力扣(LeetCode)
这个例题需要首先考虑的是根的三种情况
第一种是一个为空一个不为空,则不是两个相同的树。
第二种是如果两个都为空,则是相同的树。
第三种是两个都不为空,值不一样,不是两课相同的树。
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);}
}
例题2:另一棵树的子树问题
572. 另一棵树的子树 - 力扣(LeetCode)
这个题首先我们考虑他们是否相同,可以利用例题1的方法进行判断,第二种情况就是左边的是它的左子树,第三种情况就是右边的是它的右子树。
public boolean isSubtree(TreeNode root, TreeNode subRoot) {if(root==null){return false;}if(isSameTree(root,subRoot)){return true;}if(isSubtree(root.left,subRoot)){return true;}if(isSubtree(root.right,subRoot)){return true;}return false;}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);}
例题3:翻转二叉树
226. 翻转二叉树 - 力扣(LeetCode)
这个题需要找一个临时变量,然后进行交换。
public TreeNode invertTree(TreeNode root) {
if(root==null){return null;
}
invertTree(root.left);
invertTree(root.right);
TreeNode tmp=root.left;
root.left=root.right;
root.right=tmp;
return root;}
例题4:对称二叉树
101. 对称二叉树 - 力扣(LeetCode)
这个题我们首先进行结构上的判断,首先判断root节点是否为空,如果为空返回true,然后判断左右子树的节点,首先看左右子树是否为空,然后判断左右子树的值。
public boolean isSymmetric(TreeNode root) {if(root==null){return true;}return isSymmetricChild(root.left,root.right);}public boolean isSymmetricChild(TreeNode leftTree,TreeNode rightTree){
if(leftTree==null&&rightTree!=null||leftTree!=null&&rightTree==null){return false;
}if(leftTree==null&&rightTree==null){return true;
}
if(leftTree.val!=rightTree.val){return false;
}return isSymmetricChild(leftTree.left,rightTree.right)&&
isSymmetricChild(leftTree.right,rightTree.left);}