二叉查詢樹(華中科技大學計算機考研複試上機題)

Anstrue發表於2017-03-29
題目描述
輸入一系列整數,建立二叉排序數,並進行前序,中序,後序遍歷。 
輸入描述:
輸入第一行包括一個整數n(1<=n<=100)。
接下來的一行包括n個整數。

輸出描述:
可能有多組測試資料,對於每組資料,將題目所給資料建立一個二叉排序樹,並對二叉排序樹進行前序、中序和後序遍歷。
每種遍歷結果輸出一行。每行最後一個資料之後有一個空格。

輸入中可能有重複元素,但是輸出的二叉樹遍歷序列中重複元素不用輸出。

二叉查詢樹

二叉查詢樹,也叫二叉排序樹是滿足以下條件的二叉樹:
1.左子樹上的所有節點值均小於根節點值
2.右子樹上的所有節點值均不小於根節點值
3.左右子樹也滿足上述兩個條件

節點類:

class Node {
    public int iData;   		//資料域,可以存放物件
    public Node left;                   //指向左孩子
    public Node right;			//指向右孩子
    public void displsyndoe(){		
        System.out.print(iData +" ");
    }

    public Node(int iData) {		//建構函式
        this.iData = iData;
    }
}

二叉查詢樹類

二叉查詢樹的插入過程如下:

1.若當前的二叉查詢樹為空,則插入的元素為根節點

2.若插入的元素值小於根節點值,則將元素插入到左子樹中

3.若插入的元素值不小於根節點值,則將元素插入到右子樹中

public void insert(int iData ){	//插入新的節點
        Node newNode = new Node(iData);
        if(root == null){		//樹為空,把第一個節點置為根節點
            root = newNode;
        }else{ //不為空
            Node current = root;	//宣告啷個指向root的引用
            Node parent = root;
            while (true){  
                parent = current;
                if(iData < current.iData){   //待插入的數值小於當前節點的值
                    current = current.left;  //把current指向當前節點的左孩子
                    if (current == null){
                        parent.left = newNode;
                        return;
                    }
                }else {
                    current = current.right;   //待插入的數值大於當前節點的值
                    if (current == null){
                        parent.right = newNode;
                        return;
                    }
                }
            }
        }
    }
}



遍歷

遍歷是一個簡單的遞迴過程,記住先序、中序、後序遍歷的口訣就可以了

 public void preOrder(Node node){
        if(node!=null){
            node.displsyndoe();      	
            preOrder(node.left);
            preOrder(node.right);
        }
    }
    
    public void middleOrder(Node node){
        if(node!=null){
            middleOrder(node.left);	
            node.displsyndoe();
            middleOrder(node.right);
        }
    }

    public void postOrder(Node node){
        if(node!=null){
            postOrder(node.left);
            postOrder(node.right);
            node.displsyndoe();
        }
    }







相關文章