文章标题

算法准备之数据结构
import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;
class Node{
public int iData;
public double dData;
public Node leftChild;
public Node rightChild;

public void displayNode(){

    System.out.print('{');
    System.out.print(iData);
    System.out.print(' ');
    System.out.print(dData+"}");
}

}

class Tree{

private Node root;

public Tree(){
    root=null;
}

public Node find(int key){

    Node current = root;
    while(current.iData!=key){
        if(key<current.iData){
            current = current.leftChild;
        }else{
            current = current.rightChild;
        }

        if(current==null){
            return null;
        }
    }
    return current;
}

public void insert(int id,double dd){

    Node newNode = new Node();
    newNode.iData=id;
    newNode.dData=dd;
    if(root==null){
        root=newNode;
    }else{
        Node current =root;
        Node parent;
        while(true){

            parent = current;
            if(id< current.iData){

                current = current.leftChild;
                if(current == null){

                    parent.leftChild=newNode;
                    return;

                }   
            }else{

                current=current.rightChild;
                if(current == null){

                    parent.rightChild=newNode;
                    return;
                }
            }

        }
    }
}

public boolean delete(int key){
    Node current = root;
    Node parent = root;
    boolean isLeftChild = true;

    while(current.iData!=key){
        parent = current;
        if(key<current.iData){
            isLeftChild = true;
            current=current.leftChild;
        }else{
            isLeftChild = false;
            current = current.rightChild;
        }
        if(current == null){
            return false;
        }

    }

    if(current.leftChild==null&&current.rightChild==null){
        if(current==root){
            root=null;
        }else if(isLeftChild){
            parent.leftChild=null;
        }else{
            parent.rightChild=null;
        }
    }else if(current.rightChild==null){
        if(current == root){
            root = current.leftChild;
        }else if(isLeftChild){
            parent.leftChild=current.leftChild;
        }else{
            parent.rightChild=current.leftChild;
        }
    }else if(current.leftChild==null){
        if(current == root){
            root=current.rightChild;
        }else if(isLeftChild){
            parent.leftChild = current.rightChild;
        }else{
            parent.rightChild = current.rightChild;
        }
    }else{
        Node successor = getSuccessor(current);

        if(current == root){
            root = successor;
        }else if(isLeftChild){
            parent.leftChild = successor;
        }else{
            parent.rightChild = successor;
        }

        successor.leftChild=current.leftChild;
    }
    return true;
}

private Node getSuccessor(Node delNode){
    Node successorParent = delNode;
    Node successor = delNode;
    Node current = delNode.rightChild;
    while(current !=null){
        successorParent = successor;
        successor = current;
        current = current.leftChild;
    }

    if(successor !=delNode.rightChild){
        successorParent.leftChild = successor.rightChild;
        successor.rightChild = delNode.rightChild;
    }
    return successor;
}

public void traverse(int traverseType){
    switch(traverseType){
    case 1:{
        System.out.print("\nPreorder traversal: ");
        preOrder(root);
        break;
    }
    case 2:{
        System.out.print("\nInorder traversal: ");
        inOrder(root);
        break;
    }
    case 3:{
        System.out.print("\nPostOrder traversal: ");
        postOrder(root);
        break;
    }


    }

    System.out.println();

}

private void inOrder(Node localRoot){
    if(localRoot!=null){
        inOrder(localRoot.leftChild);
        System.out.print(localRoot.iData+" ");
        inOrder(localRoot.rightChild); 

    }
}

private void preOrder(Node localRoot){
    if(localRoot!=null){
        System.out.print(localRoot.iData+" ");
        preOrder(localRoot.leftChild);
        preOrder(localRoot.rightChild);
    }
}

private void postOrder(Node localRoot){
    if(localRoot!=null){
        postOrder(localRoot.leftChild);
        postOrder(localRoot.rightChild);
        System.out.print(localRoot.iData+" ");
    }
}

public void disPlayTree(){
    Stack globalStack = new Stack();
    globalStack.push(root);
    int nBlanks = 32;
    boolean isRowEmpty = false;
    System.out.println("...................................");
    while(!isRowEmpty){
        Stack localStack = new Stack();
        isRowEmpty = true;

        for(int j=0;j<nBlanks;j++){
            System.out.print(" ");
        }

        while(globalStack.isEmpty()==false){
            Node temp=(Node)globalStack.pop();
            if(temp!=null){
                System.out.print(temp.iData);

                localStack.push(temp.leftChild);
                localStack.push(temp.rightChild);

                if(temp.leftChild!=null||temp.rightChild!=null){
                    isRowEmpty = false;
                }else{
                    System.out.print("--");
                    localStack.push(null);
                    localStack.push(null);
                }

                for(int j=0;j<nBlanks*2-2;j++){
                    System.out.print(" ");
                }
            }

            System.out.println();
            nBlanks/=2;
            while(localStack.isEmpty()==false){
                globalStack.push(localStack);
            }
        }

        System.out.println();
    }

}

}

public class TestForString {

static int total=0;

public static void main(String[] arg){

    int value;
    Tree theTree = new Tree();
    theTree.insert(50, 1.5);
    theTree.insert(25, 1.2);
    theTree.insert(75, 1.7);
    theTree.insert(12, 1.5);
    theTree.insert(37, 1.2);
    theTree.insert(43, 1.7);
    theTree.insert(30, 1.5);
    theTree.insert(33, 1.2);
    theTree.insert(87, 1.7);
    theTree.insert(93, 1.5);
    theTree.insert(97, 1.5);

    //theTree.disPlayTree();
    theTree.traverse(1);
    theTree.traverse(2);
    theTree.traverse(3);
}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值