九度筆記之 1467:二叉排序樹
阿新 • • 發佈:2019-01-02
題目1467:二叉排序樹
時間限制:1 秒
記憶體限制:128 兆
特殊判題:否
提交:1292
解決:518
- 題目描述:
-
二叉排序樹,也稱為二叉查詢樹。可以是一顆空樹,也可以是一顆具有如下特性的非空二叉樹:
1. 若左子樹非空,則左子樹上所有節點關鍵字值均不大於根節點的關鍵字值;
2. 若右子樹非空,則右子樹上所有節點關鍵字值均不小於根節點的關鍵字值;
3. 左、右子樹本身也是一顆二叉排序樹。
現在給你N個關鍵字值各不相同的節點,要求你按順序插入一個初始為空樹的二叉排序樹中,每次插入後成功後,求相應的父親節點的關鍵字值,如果沒有父親節點,則輸出-1。
- 輸入:
-
輸入包含多組測試資料,每組測試資料兩行。
第一行,一個數字N(N<=100),表示待插入的節點數。
第二行,N個互不相同的正整數,表示要順序插入節點的關鍵字值,這些值不超過10^8。
- 輸出:
-
輸出共N行,每次插入節點後,該節點對應的父親節點的關鍵字值。
- 樣例輸入:
-
5 2 5 1 3 4
- 樣例輸出:
-
-1 2 2 5 3
演算法分析
考察二叉排序數的基本操作,插入過程相對簡單,value大於當前節點跳到右子樹,value小於當前節點跳到左子樹
插入過程和查詢過程十分類似,不過在查詢中需要判斷當前節點是否等於value.
biNode* search(int value){ biNode *y = NULL; biNode *x = root; while(x!=NULL){ if(value > x->value){ y = x; x = x->Left; } else{ y = x; x = x->Right; } } return x; }
二叉排序數的其它操作參見 二叉排序數的總結
源程式
//============================================================================ // Name : judo1467.cpp // Author : wdy // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> using namespace std; struct biNode{ int value; biNode *parent; biNode *Left; biNode *Right; public: biNode(int value_):value(value_),parent(NULL),Left(NULL),Right(NULL){}; }; biNode *root = NULL; void insert(int value){ biNode *temnode = new biNode(value); if(root==NULL){ root = temnode; std::cout<<-1<<std::endl; return; } biNode *y = NULL; biNode *x = root; while(x!=NULL){ if(value > x->value){ y = x; x = x->Left; } else{ y = x; x = x->Right; } } if(value > y->value){ y->Left = temnode; }else{ y->Right = temnode; } std::cout<< y->value <<std::endl; } void init(int n){ root = NULL; int value; for(int i = 0;i<n;i++){ std::cin>>value; insert(value); } } void judo(){ int n = 0; while(std::cin>>n){ init(n); } } int main() { //cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! judo(); return 0; } /************************************************************** Problem: 1467 User: KES Language: C++ Result: Accepted Time:20 ms Memory:1520 kb ****************************************************************/