PTAタイトルセットのデータ構造とアルゴリズム(中国)7-31

PTAタイトルセットのデータ構造とアルゴリズム(中国)7-31

7-31デカルトツリー(25点)
 

デカルトツリーは、ノードは二つのキーワードK1とK2が含まれている特殊なバイナリツリー、です。まず、デカルト木はK1バイナリ検索ツリーについてです、すべてのK1値の左部分木で、そのノードがノードK1の値よりも小さい、右の子は大きいです。二次すべてのノードK2キーワード、すなわちプライオリティキュー(最小ヒープを設定することを望むかもしれない)の要件を満たす、K2の値は、すべてのノードのサブツリーK2値のノードよりも小さくなっています。バイナリツリーを考えると、ツリーデカルト木かどうかを確認してください。

入力フォーマット:

まず、入力の正の整数N(≤1000)、ツリー内のノードの数。ノードのK1値、K2の値、左の子ノード番号、右の子ノード番号:次いで、N行は、各ノードが含むメッセージを、与えられています。ノード0から提供される(N-1)オーダー〜数。ノードの子ノードが存在しない場合は、場所が与えられています- 。

出力フォーマット:

出力YESツリーは、デカルト木である場合は、それ以外の場合は出力NO

サンプル入力1:

6
8 27 5 1
9 40 -1 -1
10 20 0 3
12 21 -1 4
15 22 -1 -1
5 35 -1 -1

出力サンプル1:

YES

サンプル入力2:

6
8 27 5 1 9 40 -1 -1 10 20 0 3 12 11 -1 4 15 22 -1 -1 50 35 -1 -1 

出力サンプル2:

NO
トピック分析は:主に単語の問題のツリーは、各サブツリーは、我々はバランスの取れたバイナリツリープライオリティキューの定義と理解(最小ヒープ)バランスの取れたバイナリ判断の定義を満たす必要がある右の全体的な大きな木よりも左より小さい満たすためだけでなく、注意を払うことですバランスの取れたバイナリツリーの概念
  1  の#define _CRT_SECURE_NO_WARNINGS
   2の#include <stdio.hの>
   3の#include < 文字列・H>
   4の#include < malloc関数 .H>
   5  
  6  構造体のTreeNode
   7  {
   8      int型K1。
  9      int型K2;
10      INT Lcは、
11      INT Rcは、
12 } T R [ 1000年]。
13  
14  INT収集[ 1000年]。
15  
16  INT FindTree(INT N)
17  {
 18      のためにint型 i = 0 ; iがN <、iは++ 19          であれば(!収集[I])
 20              リターンI。
21  }
 22  
23  
24  
25  int型 IsAVL(INT ツリー)
 26  {
 27      であれば(ツリー== - 1 28          リターン 1 29      他の
30      {
 31          であれば(TR [ツリー]を得た。LC = - !1!&& T R [ツリー] .RC = - 1 32             もし(TR [ツリー] .K1> = T R [T R [ツリー]を得た。LC] .K1 && T R [ツリー] .K1 < T R [T R [ツリー] .RC] .K1)
 33                  リターン IsAVL(TR [ツリー]。 LC)&& IsAVL(TR [ツリー] .RC)。
34              他の
35                  の戻り 0 ;
36          他の 場合(TR [ツリー]を得た。LC == - 1 && T R [ツリー] .RC == - 1 37              リターン 1 38          他の 場合(TR [ツリー]を得た。LC == - 1 39              リターン T R [ツリー] .K1 < T R [T R [ツリー] .RC] .K1。
40          他の
41              のリターン Trの[ツリー] .K1> =Trの[Trの[ツリー]を得た。LC] .K1。
42  
43      }
 44  }
 45  
46  INT IsMinHeap(INT ツリー)
 47  {
 48      であれば(ツリー== - 1 49          リターン 1 50      他の
51      {
 52          であれば(TR [ツリー]を得た。LC = - !1 && T R [ツリー] .RC =! - 1 53              であれば(TR [ツリー] .K2 <= T R [T R [ツリー]を得た。LC]。 K2 && T R [ツリー] .K2 <= T R [T R [ツリー] .RC] .K2)
 54                  リターン IsMinHeap(TR [ツリー]を得た。LC)&& IsMinHeap(TR [ツリー] .RC)。
55              他の
56                  の戻り 0 ;
57          他の 場合(TR [ツリー]を得た。LC == - 1 && T R [ツリー] .RC == - 1 58              リターン 1 59          他の 場合(TR [ツリー]を得た。LC == - 1 60              リターン T R [ツリー] .K2 <= T R [T R [ツリー] .RC] .K2。
61          
62              リターン T R [ツリー] .K2 <= T R [T R [ツリー]を得た。LC] .K2。
63      }
 64  }
 65  INT JudgetLeft(INTツリー、INT T)。
66 int型 JudgetRight(int型の木、int型のT);
67  
68  INT JudgetLeft(int型ツリー、INT T)
 69  {
 70      であれば(T == - 1つの ||ツリー== - 1 71          リターン 1 72      であれば(TR [ツリー] .K1> T R [T] .K1)
 73          リターン JudgetLeft(木、T R [T]を得た。LC)&& JudgetLeft(木、T R [T] .RC)。
74      他の
75          の戻り 0 ;
76  }
 77  
78  INTJudgetRight(int型ツリー、INT T)
 79  {
 80      であれば(T == - 1つの ||ツリー== - 1 81          リターン 1 82      であれば(TR [ツリー] .K1 < T R [T] .K1)
 83          リターン JudgetRight(木、T R [T]を得た。LC)&& JudgetRight(木、T R [T] .RC)。
84      他の
85          の戻り 0 ;
86  }
 87  
88  INT IsTree(INT ツリー)
 89  {
 90      であれば(ツリー== - 191          リターン 1 92      であれば(JudgetLeft(木、T R [ツリー]を得た。LC)&& JudgetRight(木、T R [ツリー] .RC))
 93          リターン IsTree(TR [ツリー]を得た。LC)&& IsTree(TR [ツリー] .RC)。
94      他の
95          の戻り 0 ;
96  }
 97  
98  のint main()の
 99  {
 100      INT N。
101      のscanf(" %dの"、&N)。
102      のためのint型 iは= 0 ; iがNを<; Iは++ 103     {
 104          INT K1、K2、LC、Rcを、
105          のscanf(" %D%D%D%D "、およびK1、およびK2、&LC、&RC)。
106          T R [I] .K1 = K1。
107          T R [I] .K2 = K2。
108          T R [i]を得た。LC = Lcと;
109          T R [i]は.RC = Rcと;
110          であれば(Lcが=! - 1 111              収集[Lcは] = 1 112          であれば(RC =! - 1 113は、              収集[RC] = 1 114      }
115      INTツリー= FindTree(N)。
116      であれば(IsAVL(ツリー)&& IsMinHeap(ツリー)&& IsTree(木))
 117          のprintf(" YES " )。
118      そう
119          のprintf(" NO " )。
120      戻り 0 ;
121 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/57one/p/11648998.html