Java之二叉树的基本操作实现

1. 模拟实现二叉树前,我们要先表示树,首先定义一个内部类,当作二叉树节点

static class TreeNOde{
        char val;//存放二叉树的值
        TreeNOde left;//指向左子树的引用
        TreeNOde right;//指向右子树的引用
        //构造方法,用于实例化树的节点
        public TreeNOde(char val) {
            this.val = val;
        }
    }

2. 简单构建一个树

public TreeNOde  easycreat(){
        TreeNOde A=new TreeNOde('A');
        TreeNOde B=new TreeNOde('B');
        TreeNOde C=new TreeNOde('C');
        TreeNOde D=new TreeNOde('D');
        TreeNOde E=new TreeNOde('E');
        TreeNOde F=new TreeNOde('F');
        A.left=B;
        A.right=C;
        B.left=D;
        C.left=E;
        C.right=F;
        return A;
    }

最后简单构造的树如下图所示:
在这里插入图片描述

3. 获取树中节点的个数

3.1 利用递归实现

    public int getNodesize1(TreeNOde root){
        if(root==null) return 0;
        return getNodesize1(root.left)+getNodesize1(root.right)+1;
    }  

3.2 利用遍历树实现

int nodeSize=0;
    public int getNodesize2(TreeNOde root){
        if(root==null) return 0;
        nodeSize++;
        getNodesize2(root.left);
        getNodesize2(root.right);
        return nodeSize;
    }

4. 获取叶子节点的个数

4.1 利用递归实现

    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.2 利用遍历树实现

    int leafnode=0;
    int getLeafNodeCount2(TreeNOde root){
        if(root==null)return 0;
        if(root!=null&&root.left==null&&root.right==null){
            leafnode++;
        }
        getLeafNodeCount2(root.left);
        getLeafNodeCount2(root.right);
        return leafnode;
    }

5. 检测值为value的元素是否存在

TreeNOde find(TreeNOde root, char 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;
    }

6. 获取第K层节点的个数

 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);
 }

7. 获取二叉树的高度

 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;
 }

8. 打印找数据的方法

public void displayfind(TreeNOde root){
        if(root==null){
            System.out.println("二叉树中不存在该数据");
            return;
        }
        System.out.println("找到了数据为"+root.val);
    }

9. 实现类代码

public class Test {
    public static void main(String[] args) {
        BinaryTree binaryTree=new BinaryTree();
        BinaryTree.TreeNOde root=binaryTree.easycreat();
        System.out.println("找相关数据:");
        BinaryTree.TreeNOde findnode1= binaryTree.find(root, 'j');
        binaryTree.displayfind(findnode1);
        BinaryTree.TreeNOde findnode2=binaryTree.find(root, 'B');
        binaryTree.displayfind(findnode2);
        System.out.println("树中节点个数:");
        System.out.println(binaryTree.getNodesize1(binaryTree.easycreat()));
        System.out.println(binaryTree.getNodesize2(binaryTree.easycreat()));
        System.out.println("叶子节点个数:");
        System.out.println(binaryTree.getLeafNodeCount1(binaryTree.easycreat()));
        System.out.println(binaryTree.getLeafNodeCount2(binaryTree.easycreat()));
        System.out.println("第k层有多少个节点;");
        System.out.println(binaryTree.getKLevelNodeCount(binaryTree.easycreat(),2));
        System.out.println(binaryTree.getKLevelNodeCount(binaryTree.easycreat(),3));
        System.out.println("树的高度");
        System.out.println(binaryTree.getHeight(binaryTree.easycreat()));
    }
}

最后实现效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值