トラバーサル二分探索木、検索、挿入、削除などのpythonを達成するために
1 クラスのTreeNode(): 2 DEF __init__(自己、キー、P =なし、左=なし、右= なし): 3 self.key = キー 4 self.p = P 5 self.left = 左 6 self.right = 右 7 8 クラスBinarySearchTree(): 9 #1 中序遍历 10 DEF inorderWalk(自己、X): 11 であれば、X =!なし: 12 self.inorderWalk(x.left) 13 プリント(x.key、端= " ") 14 self.inorderWalk(x.right) 15 #查找给定节点 16 DEF treeSearh(自己、X、K): 17 であれば、X ==なし又は x.key == K: 18 リターンX 19 であれば K < X。キー: 20 リターンself.treeSearh(x.left、k)は 21 、他:返すself.treeSearh(x.right、k)は 22 #最小关键元素 23 デフtreeMinimum(自己、X): 24 しばらく x.left =!なし: 25 X = x.left 26は リターンX 27 #最大のキー要素 28 DEF treeMaximum(セルフ、X): 29 ながら X.rightは!= なし: 30 X = x.right 31がなく 返すX 32 #後続ノード 33は、 DEF treeSuccessor(セルフ、X): 34である IF!= x.right なし: 35 戻りself.treeMinimum(x.right) 36 Y = XP 37 ながら Y 及び Xは== y.right: 38であり 、X = Y 39 Y = YP 40 リターンY 41 #前驱节点 42 DEF treePredecessor(自己、X): 43 なら x.left =!なし: 44 戻りself.treeMaximum(x.left) 45 、Y = XP 46 ながら、 Y 及び X == Y .LEFT: 47 、X = Y 48 、Y = YP 49 戻りY 50 DEF treeInsert(自己、T、Z): 51 、Y = なし 52 X =T 53 ながらX: 54 、Y = X 55 であれば z.key < x.key: 56 、X = x.left 57 さもなければ:X = x.right 58 ZP = Y 59 であれば Y == なし: 60 T = Z 61 のelif z.key < y.key: 62 y.left = Z 63 さもなければ:y.right = Z 64 #移动子树 65 デフ移植(自己、T、U、V): 66 もしアップ== なし: 67 T = V 68 のelif uは== upleft: 69 upleft = V 70 、他: 71 直立= V 72 の場合:V 73 VP = アップ 74 #删除给定节点 75 デフtreeDelete(自己、T、 Z): 76 なら z.left == なし: 77 self.transPlant(T、Z、z.right) 78 ELIFの z.right == なし: 79 self.transPlant(T、Z、z.left) 80 他: 81 、Y = self.treeMinimum(z.right) 82 なら YP =!Z: 83 self.transPlant(T、Y、y.right)が 84 y.right = z.right 85 y.right.p = Y 86 self.transPlant(T、Z、Y) 87 y.left = z.left 88 y.left.p = Y 89 90 なら __name__ == " __main__ " : 91 ノード1 =ツリーノード(15 ) 92 NODE2 =ツリーノード(6 ) 93 ノード3 =ツリーノード(18 ) 94 ノード4 =ツリーノード(3 ) 95 NODE5 =ツリーノード(7 ) 96 node6 =ツリーノード(17 ) 97 node7 =ツリーノード(20 ) 98 node8 =ツリーノード(2 ) 99 node9 =ツリーノード(4 ) 100 NODE10 =ツリーノード(13 ) 101 NODE11 =ツリーノード(9 ) 102 bstree = BinarySearchTree() 103 bstree.treeInsert(ノード1、ノード2) 104 bstree.treeInsert(ノード1、ノード3) 105 bstree.treeInsert(ノード1、ノード4) 106 bstree.treeInsert(ノード1、NODE5) 107 bstree.treeInsert(ノード1、node6) 108 bstree.treeInsert(ノード1、node7) 109 bstree.treeInsert(ノード1 、node8) 110 bstree.treeInsert(ノード1、node9) 111 bstree.treeInsert(ノード1、NODE10) 112 bstree.treeInsert(ノード1、NODE11) 113 bstree.inorderWalk(ノード1) 114 ノード= bstree.treeSearh(node1,7 ) 115 印刷("" ) 116 印刷(node.key、node.p.key、node.right.key) 117 min_node = bstree.treeMinimum(ノード1) 118 max_node = bstree.treeMaximum(ノード1) 119 プリント(min_node.key、max_node.key) 120 su_node1 = bstree .treeSuccessor(ノード1) 121 プリント(su_node1.key) 122 su_node2 = bstree.treeSuccessor(NODE10) 123 プリント(su_node2.key) 124 su_node3 = bstree.treePredecessor(NODE11) 125 プリント(su_node3.key) 126 su_node4 = bstree.treePredecessor (ノード2) 127 印刷(su_node4.key) 128 、Z =ツリーノード(8 ) 129 bstree.treeInsert(ノード1、Z) 130 bstree.inorderWalk(ノード1) 131 bstree.treeDelete(ノード1、ノード2) 132 プリント("" ) 133 bstree.inorderWalk(ノード1)