二叉树的基本遍历
1.获取树中结点个数
方法1
java
public static int nodeSize=0;
// 获取树中节点的个数
public void size(TreeNode root){
//判断是否有节点
if(root==null){
return ;
}
nodeSize++;
//遍历左子树节点
size(root.left);
//遍历右子树节点
size(root.right);
}
方法2
java
public int size2(TreeNode root){
if(root==null){
return 0;
}
return size2(root.left)+size2(root.right)+1;
}
2.获取节点个数
java
// 获取叶子节点的个数
//叶子:度为0的节点
public static int leafSize=0;
public void getLeafNodeCount(TreeNode root){
if(root==null){
return;
}
//叶:度为0,没有左子树和右子树
if(root.right==null&&root.left==null){
leafSize++;
}
//叶子数=右子树的叶子数+左子树的叶子数
getLeafNodeCount(root.left);
getLeafNodeCount(root.right);
}
方法2
java
public int getLeafNodeCount2(TreeNode root){
if(root==null){
return 0;
}
if(root.right==null&&root.left==null){
return 1;
}
//叶子数=右子树的叶子数+左子树的叶子数
return getLeafNodeCount2(root.left)+ getLeafNodeCount2(root.right);
}
3.获取第k层节点个数
java
// 获取第K层节点的个数
public int getKLevelNodeCount(TreeNode root,int k){
if(root==null){
return 0;
}
//当k==1时,表示当前要查找的层次
if (k==1){
return 1;
}
//递归左右子树,直到k==1,到查找的层次
//后将左子树的该层次的节点数+右子树的该层次的节点数
return getKLevelNodeCount(root.left,k-1)+ getKLevelNodeCount(root.right,k-1);
}
4.获取二叉树的高度
java
// 获取二叉树的高度
//看左子树的高度和右子树的高度
//取左子树和右子树中的最大高度
public int getHeight(TreeNode root){
if(root==null){
return 0;
}
int leftheight=getHeight(root.left);
int rightheight=getHeight(root.right);
return Math.max(leftheight,rightheight)+1;
}
5.判断元素位置
java
// 检测值为value的元素是否存在,在哪个节点
public TreeNode find(TreeNode root, char val){
if(root==null){
return null;
}
if(root.val==val){
return root;
}
TreeNode left=find(root.left,val);
//如果目标在左子树,直接返回左节点
if(left!=null){
return left;
}
TreeNode right=find(root.right,val);
//如果目标在右子树,直接返回右节点
if(right!=null){
return right;
}
//没有,返回null
return null;
}
今天就写到这里,二叉树的基本操作还有层序遍历以及判断完全二叉树,可能后续我会写到。这篇可能写的不是很好,感谢支持🌹 🌹 🌹