(Java数据结构)二叉树题目(1)

这里写自定义目录标题


(Java数据结构)二叉树题目

实现二叉树类BiTree,要求实现如下功能:

1) 求二叉树中度为2的结点数。

2) 交换一棵二叉树中每个结点的左孩子和右孩子。

class BiTreeNode{
    Object data;
    BiTreeNode lchild, rchild;
    BiTreeNode(Object d){
        data=d;
        lchild=rchild=null;
    }
}
public class BiTree {
    BiTreeNode root;
    static int index=0;
    public BiTree(String prestr){
        char c=prestr.charAt(index++);
        if(c=='#'){
            root=null;
        }
        else{
            root=new BiTreeNode(c);
            root.lchild=new BiTree(prestr).root;
            root.rchild=new BiTree(prestr).root;
        }
    }
    public void print(BiTreeNode T){
        if(T!=null){
            System.out.print(T.data);
            if(T.lchild!=null || T.rchild!=null){
                System.out.print("(");
                if(T.lchild!=null)    print(T.lchild);
                System.out.print(",");
                if(T.rchild!=null) print(T.rchild);
                System.out.print(")");
            }
        }
    }
    public int count(BiTreeNode T){
        if(T==null)return 0;
        int num=0;
        if(T.lchild!=null){
            num+=count(T.lchild);
        }
        if(T.rchild!=null){
            num+=count(T.rchild);
        }
        if(T.lchild!=null && T.rchild!=null){
            num+=1;
        }
        return num;
        
    }
    
       
    public void exchange(BiTreeNode T){
        if(T!=null){
        BiTreeNode temp;
        temp=T.lchild;
        T.lchild=T.rchild;
        T.rchild=temp;
        exchange(T.lchild);
        exchange(T.rchild);
        }
}
    
    
       
    public static void main(String[] args){
              String preStr = "AB##CD###";
              BiTree T = new BiTree(preStr);
              System.out.println("先根遍历");
              T.print(T.root);
              System.out.println("Count:"+T.count(T.root));
              T.exchange(T.root);
              T.print(T.root);
    
    
             
    }
}

最后的实例方法为我自己编写的,可以自己改成自己所需要的二叉树。有问题欢迎提出,尽力解答!!!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值