import java.util.*;
class TreeNode{
char data;
TreeNode left;
TreeNode right;
public TreeNode(char data){
this.data=data;
this.right=null;
this.left=null;
}
}
class BiTree{
static int index=0;
//构建二叉树
public TreeNode CreateTree(String str) {
if (str.charAt(index) == '#') {
index++;
return null;
} else {
TreeNode root = new TreeNode(str.charAt(index));
index++;
root.left = CreateTree(str);
root.right = CreateTree(str);
return root;
}
}
public void setIndex(){index=0;}
//先序遍历
public void PreOrder(TreeNode root){
if(root==null)
return;
else
{
System.out.print(root.data+" ");
PreOrder(root.left);
PreOrder(root.right);
}
}
//中序遍历
public void Inorder(TreeNode root){
if(root==null)
return;
else
{
Inorder(root.left);
System.out.print(root.data+" ");
Inorder(root.right);
}
}
//后序遍历
public void PostOrder(TreeNode root){
if(root==null)
return;
else
{
PostOrder(root.left);
PostOrder(root.right);
System.out.print(root.data+" ");
}
}
//获取二叉树的最大深度
public int MaxDepth(TreeNode root){
return root==null ? 0:Math.max(MaxDepth(root.left),MaxDepth(root.right))+1;
}
//第k层节点的个数
public int LevelSize(TreeNode root,int k){
if(k<1||root==null)
return 0;
if(k==1)
return 1;
else
return LevelSize(root.left,k-1)+LevelSize(root.right,k-1);
}
//判断二叉树是否是平衡二叉树
public boolean isBalanced(TreeNode root){
if(root==null)
return true;
int leftDepth=MaxDepth(root.left);
int rightDepth=MaxDepth(root.right);
return Math.abs(leftDepth-rightDepth)<2 && isBalanced(root.left) && isBalanced(root.right);
}
//获取节点个数
//若为空,则节点个数为0,
//若不为空,则节点个数=左子树节点个数+右子树节点个数+1(自己)
public int TreeSize(TreeNode root)
{
return root==null ? 0:TreeSize(root.left)+TreeSize(root.right)+1;
}
//获取叶子节点个数
//若为空,则叶子节点个数为0
//若节点的左子树和右子树均为空,则叶子节点个数为1
//除上述两种情况外,说明该树存在字数,其叶子节点个数=左子树的叶子节点个数+右子树的叶子节点个数
public int TreeLeafSize(TreeNode root)
{
if(root==null)
return 0;
if(root.left==null && root.right==null)
return 1;
return TreeLeafSize(root.left)+TreeLeafSize(root.right);
}
//
}
public class Main{
public static void main(String args[]){
Scanner in=new Scanner(System.in);
String s=in.next();
BiTree tree=new BiTree();
TreeNode root=tree.CreateTree(s);
tree.Inorder(root);
System.out.println();
System.out.println(tree.MaxDepth(root));
System.out.println(tree.LevelSize(root,3));
if(tree.isBalanced(root))
System.out.println("The BinaryTree is a balanced tree");
else
System.out.println("The BinaryTree is not a balanced tree");
System.out.println(tree.TreeSize(root));
System.out.println(tree.TreeLeafSize(root));
tree.setIndex();
}
}
Java二叉树的基本操作
最新推荐文章于 2023-02-22 13:04:46 发布