以下是关于二叉树的基本操作(递归实现)
1、求二叉树的总节点个数
2、求叶子节点个数
3、求第K层节点个数
4、求二叉树的高度
5、查找给定val所在的节点
//求树的节点个数
public static int sumNode(Node root) {
if (root == null) {
return 0;
}
return 1 + sumNode(root.left) + sumNode(root.right);
}
//求叶子节点个数
//叶子节点:左子树和右子树都为空
public static int leafNode(Node root){
if(root==null){
return 0;
}
if(root.left==null&&root.right==null){
return 1;
}
return leafNode(root.left)+leafNode(root.right);
}
//求第K层的节点个数
//第K层=第K-1层左子树节点个数+第K-1层右子树节点个数
public static int Knode(Node root,int k){
if(root==null||k==0){
return 0;
}
if(k==1){
return 1;
}
return Knode(root.left,k-1)+Knode(root.right,k-1);
}
//求二叉树的高度
//从根节点到叶子节点最长的路径即为二叉树的高度/最大深度
public static int maxDepth(Node root){
if(root==null){
return 0;
}
if(root.left==null&&root.right==null){
return 1;
}
int leftDepth=maxDepth(root.left);
int rightDepth=maxDepth(root.right);
return 1+(leftDepth>rightDepth?leftDepth:rightDepth);
}
//查找val所在节点
public static Node find(Node root,char toFind){
if(root==null){
return null;
}
if(root.val==toFind){
return root;
}
//先查找左子树
Node result=find(root.left,toFind);
if(result!=null){
return result;
}
//再查找右子树
return find(root.right,toFind);
}