数据结构复习(重写某些重要数据结构API) ------------二叉树

基本API
初始化 查找 遍历

package 二叉树;

import java.util.Scanner;

import javax.print.DocFlavor.INPUT_STREAM;

class  Tree{
    String data;
    Tree leftTree;
    Tree rightTree;

}
public class BinaTree {
    static final int MAX = 20;
    static Scanner scanner = new Scanner(System.in);
    Tree init(){//初始化
        Tree node;
        if((node = new Tree())!=null){
            System.out.println("输入一个根节点的数据:");
            node.data = scanner.next();
            node.leftTree = null;
            node.rightTree = null;
            if(node != null){
                return node;
            }
            else {
                return null;
            }


        }
        return null;
    }

    void addTreeNode(Tree node) {//添加树节点
        Tree pnode, parent;
        String data;
        int menusel;

        if ((pnode = new Tree()) != null) {
            System.out.println("输入二叉树节点数据:");
            pnode.data = scanner.next();
            pnode.leftTree = null;
            pnode.rightTree = null;
            System.out.println("输入节点的父节点:");
            data = scanner.next();
            parent = find(node, data);
            if (parent == null) {
                System.out.println("没找到该父节点!");
                pnode = null;
                return;
            }
            System.out.println("1.添加树的左节点\n2.添加树的右节点");
            do {
                menusel = scanner.nextInt();
                if (menusel == 1 || menusel == 2) {
                    if (parent == null) {
                        System.out.println("不存在父节点!");
                    } else {
                        switch (menusel) {
                        case 1:
                            if (parent.leftTree != null) {
                                System.out.println("左节点不为空!");
                            } else {
                                parent.leftTree = pnode;
                            }

                            break;
                        case 2:
                            if (parent.rightTree != null) {
                                System.out.println("右节点不为空!");
                            } else {
                                parent.rightTree = pnode;
                            }
                            break;
                        default:
                            System.out.println("请输入1或者2!");
                            break;
                        }
                    }
                }
            } while (menusel != 1 && menusel != 2);
        }
    }

    Tree find(Tree treeNodeTree , String data){//查找节点

        Tree ptr;
         if(treeNodeTree == null){
             return null;
         }
         else {
             if(treeNodeTree.data.equals(data)){
                 return treeNodeTree;
             }
             else{
            if((ptr =find(treeNodeTree.leftTree, data))!=null){
                return ptr;
            }
            if((ptr=find( treeNodeTree.rightTree, data))!=null){
                return ptr;
            }
            else {
                return null;
            }
             }
        }
    }

    Tree   getLeft(Tree tree){
        if(tree!=null){
            return tree.leftTree;
        }
        return null;
    }

     Tree getRight(Tree tree){
    if(tree != null){
        return tree.rightTree;
}
    return null;
}

    int isEmpty(Tree tree){
        if(tree==null){
            return 1;
        }
        return 0;
    }

    int treeDepth(Tree tree){
        int depthLeft,depthRight;
        if(tree == null){
            return 0;
        }
        else{
            depthLeft= treeDepth(tree.leftTree);
            depthRight=treeDepth(tree.rightTree);
            if(depthLeft>depthRight){
                return depthLeft+1;
            }
                    else {
                        return depthRight+1;
                    }
        }

    }

   void clear(Tree tree){
       if(tree!=null){
         clear(tree.leftTree);
         clear(tree.rightTree);
         tree = null;
       }

   }

   void showData(Tree tree){
       System.out.println(tree.data);
   }
  void DLRtree(Tree tree){//先序遍历
      if(tree != null){
          showData(tree);
          DLRtree(tree.leftTree);
          DLRtree(tree.rightTree);
      }
  }
  void LDRtree(Tree tree){//中序遍历
      if(tree != null){
          LDRtree(tree.leftTree);
          showData(tree);
          LDRtree(tree.rightTree);

      }

  }
  void LRDtree(Tree tree){//后序遍历
      if(tree != null){
          LRDtree(tree.leftTree);
          LRDtree(tree.rightTree);
          showData(tree);
      }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值