その後の二分探索木トラバーサル順序:オファー(XXIII)を受賞
検索マイクロチャネル公共番号:「AI-ming3526」以上のアルゴリズム、機械学習のための「この小さなコンピュータビジョン」、ドライ
CSDN:https://blog.csdn.net/baidu_31657889/
GitHubの:https://github.com/あいみ-CN / AILearners
まず、プライマー
このシリーズは、独自のアルゴリズムの下で能力を強化することを目指して、オンラインの質問ノートの牛をはねのける「安全オファーを証明するために、」私のブラシです。
安全性の問題を証明することを決議オファーをクリックして、完全なアルゴリズムを表示:安全オファー完全な分析演習を証明するために
第二に、タイトル
整数配列を入力して、アレイは、バイナリ検索ツリーをトラバースした後決意の結果ではありません。出力がYesであれば、そうでなければ出力号 任意の2つの数の入力配列が異なっていると仮定する。
1、アイデア
まず、帰りがけ順の概念を理解する必要があります。最後の番号がルートノードトラバーサルで、値は、ルートノードの左サブツリー未満である、値が右サブツリーのルートノードよりも大きいです。
例えば:
{} 5,7,6,9,11,10,8例では、結果後順ルート値の最後の桁が8です。この配列において、最初の3つの数字6,7,8、ノード8の値は、左の部分木のノードであるよりも小さい、8,9、11及び大10よりも3桁の値であります右部分木のノードノード8。
我々は、次の配列と同じ方法の各部分に対応するサブツリーの構造を決定しました。実際には、これは再帰的なプロセスです。配列5,7,6のために、6最後の番号はルートノードの左の部分木の値です。図7は、右の子ノードである図5〜6時間、6は、ノードの左の子ノードの値です。同様に、配列9,11,10において、最後の符号10は、根ノードの右の部分木、小さな数字9〜10である11が右にある間、ノード10は、左の子ノードの値であります子ノード。
我々は、第1の左サブツリー及びアレイの右サブツリーの位置を決定し、その後、左サブツリーを決定する、再帰的なメソッドを使用し、右のサブツリーは、バイナリ検索ツリーはありません。
2、プログラミング
パイソン
コードの実装:
# -*- coding:utf-8 -*-
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if not len(sequence):
return False
if len(sequence) == 1:
return True
# 定义整个数的长度
length = len(sequence)
# 根节点的值
root = sequence[-1]
i = 0
# 判断左子树的位置
while sequence[i] < root:
i = i+1
k = i
# 判断右子树的值是否都大于根节点root
for j in range(i,length-1):
if sequence[j] < root:
return False
left_s = sequence[:k]
right_s = sequence[k:length-1]
left , right = True, True
# 递归遍历左右子树的值
if len(left_s) > 0:
left = self.VerifySquenceOfBST(left_s)
if len(right_s) > 0:
right = self.VerifySquenceOfBST(right_s)
return left and right
AIの詳細については、AIMI-CN AI学習交換基[1015286623]
技術、生活の中で楽しく共有:公共の私達の数コンピュータビジョンこの小さな週プッシュ「AI」シリーズのニュース記事を、あなたの関心を歓迎します!