インタビューでこの質問に出てきました。 2進ツリーのinorderトラバーサルを指定します。バイナリツリーをすべて印刷します。inorder traversalからのすべてのバイナリツリーを印刷します
最初の考え:
たとえば、配列に2つの要素しかないとします。 2・1と言う。 次に、2本の可能な木3つの要素が言えば、
2
\
1
1
/
2
ある2,1,4。それから5つの木があります。
2 1 4 2 4
\ /\ / \ /
1 2 4 1 4 2
\ / / \
4 2 1 1
基本的にn個の要素がある場合、n-1個の枝(子、/または)があります。 これらのn-1ブランチは任意の順序で配置できます。 n = 3の場合、n-1 = 2です。したがって、2つのブランチがあります。 我々は、これらの方法で2つの支店を手配することができます:
/ \ \ / /\
/ \ / \
初期の試み:
struct node *findTree(int *A,int l,int h)
{
node *root = NULL;
if(h < l)
return NULL;
for(int i=l;i<h;i++)
{
root = newNode(A[i]);
root->left = findTree(A,l,i-1);
root->right = findTree(A,i+1,h);
printTree(root);
cout<<endl;
}
}
(1,2,4)の例では、最後の例は上から下へ4-1-2でしょうか? –
@ChuckBlum配列は2,1,4です。私は数字が正しいと思います。 –
興味深い質問ですが、私はあなたの図については分かりません。私は、「左の子どもたちを訪問し、ノードを訪問し、右の子供たちを訪ねる」(順番通りの訪問N、Lの訪問、Rの訪問、Lの訪問、Lの訪問、Rの訪問N ')。そうであれば、 '(2,1)'のペアの2つのツリーは、図のように '(root = 2、R child = 1) 'であり、'(left child = 2、root = 1) 'です。あなたが描いたものもっと複雑な図についても同様の懸念がありますが、私は何かを完全に誤解しているかもしれません。 –