java 二叉树

有问题指出来就行(手动狗头)

public class BinaryTreeNode<T> {

    String key;
    T value;
    BinaryTreeNode<T> left;
    BinaryTreeNode<T> right;

    BinaryTreeNode() {
    }

    public BinaryTreeNode(T value, String key) {
        this.value = value;
        this.key = key;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }

    public BinaryTreeNode<T> getLeft() {
        return left;
    }

    public void setLeft(BinaryTreeNode<T> left) {
        this.left = left;
    }

    public BinaryTreeNode<T> getRight() {
        return right;
    }

    public void setRight(BinaryTreeNode<T> right) {
        this.right = right;
    }

    @Override
    public String toString() {
        return "Node [key=" + key + ", value=" + value + ", left=" + left + ", right=" + right + "]";
    }
}

public class BinatyTreeUtils {

  
    public static <T> Result addNodeToKey(BinaryTreeNode<T> tree,String key,BinaryTreeNode<T> node,boolean left){
        Result result = new Result();
        if(EmptyUtil.isEmpty(tree) || EmptyUtil.isEmpty(key)){
            return result.setFailMsg("空树or空key");
        }
        tree = addNode$Recursive(tree,key,node,left);
        result.setResultObject(tree);
        return result;
    }
    
  
    @SuppressWarnings("unused")
    private static <T> BinaryTreeNode<T> addNode$Recursive(BinaryTreeNode<T> tree, String key,BinaryTreeNode<T> node,boolean left) {
        if(EmptyUtil.isEmpty(tree)){
            return tree;
        }
        if(tree.getKey().equals(key)){
            if(left){
                tree.left = node;
            }else{
                tree.right = node;
            }
            return tree;
        }
        if(EmptyUtil.isNotEmpty(tree.left)){
            addNode$Recursive(tree.left,key,node,left);
        }
        if(EmptyUtil.isNotEmpty(tree.right)){
            addNode$Recursive(tree.right,key,node,left);
        }
        return tree;
    }

    
    public static <T> Result delOneNode(BinaryTreeNode<T> tree,String key){
        Result result = new Result();
        if(EmptyUtil.isEmpty(tree) || EmptyUtil.isEmpty(key)){
            return result.setFailMsg("空树or空key");
        }
        if(key.equals(tree.getKey())){
            tree = null;
        }else{
            tree = delNodeByKey$Recursive(tree,key);
        }
        result.setResultObject(tree); 
        return result;
    }

   
    private static <T> BinaryTreeNode<T> delNodeByKey$Recursive(BinaryTreeNode<T> tree, String key) {
        System.out.println(tree);
        if(EmptyUtil.isEmpty(tree)){
            return tree;
        }
        if(key.equals(tree.getKey())){
            tree = null;
        }
        
        if(EmptyUtil.isNotEmpty(tree.left)){
            if(key.equals(tree.left.getKey())){
                tree.left = null;
            }else{
                delNodeByKey$Recursive(tree.left,key);
            }
        }
        if(EmptyUtil.isNotEmpty(tree.right)){
            if(key.equals(tree.right.getKey())){
                tree.right = null;
            }else{
                delNodeByKey$Recursive(tree.right,key);
            }
        }
        return tree;
    }
}

 public static void main(String[] args) {
        BinaryTreeNode<String> tree = new BinaryTreeNode<String>("root", "root-key");
        
        BinaryTreeNode<String> node0 = new BinaryTreeNode<String>("first1", "first1-key");
        BinaryTreeNode<String> node1 = new BinaryTreeNode<String>("first2", "first2-key");
        
        BinaryTreeNode<String> node2 = new BinaryTreeNode<String>("second1", "second1-key");
        BinaryTreeNode<String> node3 = new BinaryTreeNode<String>("third1", "third1-key");
        BinaryTreeNode<String> node4 = new BinaryTreeNode<String>("second3", "second3-key");
        BinaryTreeNode<String> node5 = new BinaryTreeNode<String>("second4", "second4-key");
        
        BinaryTreeNode<String> node6 = new BinaryTreeNode<String>("sadasdasd", "asdasda");
        
        node1.right = node5;
        node1.left = node4;
        node2.left = node3;
        node0.left = node2;
        tree.left = node0;
        tree.right = node1;
        System.err.println(tree);
        
        Result result = BinatyTreeUtils.addNodeToKey(tree, "second4-key", node6,true);
        tree = (BinaryTreeNode<String>) result.getResultObject();
        System.err.println(tree);
        Result result1 = BinatyTreeUtils.delOneNode(tree, "second4-key");
        tree = (BinaryTreeNode<String>) result1.getResultObject();
        
        System.err.println(tree);
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值