java实现二叉树的基本操作

已知先序序列为: 

A B C # # D E # G # # F # # #

Node类:

public class Node {
    char data;
    Node leftNode;
    Node rightNode;

    public Node() {
    }

    public Node(char data) {
        this.data = data;
    }
}

BiTree类:

public class BinTree {
Node head;//根节点
String input;//输入的字符串
int indexOfInput=0;//用于指向字符串中字符的位置
    int len=0;


    //以先序遍历方式建立二叉树
    public void createBinTree() {
        System.out.println("开始建立二叉树:");
        input=new Scanner(System.in).next();
        head=create();//构建二叉树
        System.out.println("二叉树建立完成");

    }

    //以先序遍历方式建立二叉树
    private Node create() {
        char ch=input.charAt(indexOfInput++);
        if(ch=='#') {
          return null;

        }
        else {
            Node node=new Node();
            node.data=ch;
             node.leftNode=create();
             node.rightNode=create();
             return node;
        }
    }

    //先序遍历
    public void preOrderTraverse(Node node) {
        if(node!=null) {
            System.out.print(node.data);
            preOrderTraverse(node.leftNode);
            preOrderTraverse(node.rightNode);
        }

    }

    //中序遍历
    public void  inOrderTraverse(Node node) {
        if(node!=null) {
            inOrderTraverse(node.leftNode);
            System.out.print(node.data);
            inOrderTraverse(node.rightNode);
        }
    }

    //后序遍历
    public void  postOrderTraverse(Node node) {
        if(node!=null) {
            postOrderTraverse(node.leftNode);
            postOrderTraverse(node.rightNode);
            System.out.print(node.data);
        }
    }

    //判断树是否为空
    public boolean isTreeNull() {
        if(head==null)
            return true;
        else
            return false;
    }
    //返回二叉树的长度
     //如果是空树,则结点个数为0;
//否则,结点个数为左子树的结点个数+右子树的结点个数+1
    public int NodeCount(Node node) {
        if(isTreeNull())
            return 0;
        if(node==null)
            return 0;
        else
            return NodeCount(node.leftNode)+NodeCount(node.rightNode)+1;
    }

    //计算二叉树中叶子节点的个数
//如果是空树,则叶子结点个数为0;
//否则,为左子树的叶子结点个数+右子树的叶子结点个数
    public int LeafNodeCount(Node node) {
      if(isTreeNull())
          return 0;
      //递归的两个边界
      if(node==null)
          return 0;
        if(node.leftNode==null&&node.rightNode==null)
            return 1;
        else
            return LeafNodeCount(node.leftNode)+LeafNodeCount(node.rightNode);
    }

    //计算二叉树的深度
//如果是空树,则深度为0;
//否则,递归计算左子树的深度记为m,递归计算右子树的深度记为n,二叉树的深度则为m与n的较大者加1
    public int deepth(Node node) {
        if (isTreeNull())
            return 0;
       if(node==null)
           return 0;
       else {
           int m=deepth(node.leftNode);
           int n=deepth(node.rightNode);

           return  m>=n?m+1:n+1;
       }
    }

猜你喜欢

转载自blog.csdn.net/qq_52135683/article/details/126877865
今日推荐