非再帰的なバイナリツリー

バイナリツリーの行きがけのうち、inorderを、根本から後順トラバーサルが始まりで、横断中に、ノードを通るルートは、アクセスのちょうど別の順序と同じです。
深さの左部分木のリターン上のノードにアクセスするときに、アクセス上のノードの深さは、先行順に遭遇したときに遭遇予約限定され、その後、先行順トラバーサルISは訪問に復帰してたときに、右部分木の根元に会いました反対の接合深さとして、抗バックノードの順このプロセスでは、綿密最初にして返し、スタックを彷彿とさせるた、非再帰的なバイナリツリートラバーサルを達成したいが、あなたがスタックを使用する必要があることアイデアが実装されています

予約限定(DLR)

予約限定再帰的なプロセスです

(1)アクセスルートノード
(2)予約購入ルートのサブツリーを左
(3)プレオーダー右サブツリーのルート

前順トラバーサル非再帰的な手順であります

第一のスタックが空でない場合、ルートノードをプッシュ、スタックに左右ノード続いスタックへのアクセス、(スタックFILO、高度スタックと右ノード)

図:

void PreOrder(Btnode *b)
{
    Btnode *p;    
    SqStack st;
    InitStack(st);
    if (b != NULL)      
    {
        Push(st, b);    //根结点入栈
        while (!StackEmpty(st))
        {
            Pop(st, p);                   //根结点出栈
            printf("%c",p->data);              //在此处用输出根接地那的值表示出栈
            if (p->right != NULL)         //当右子树非空
                Push(st, p->right);   //右孩子入栈
            if (p->left != NULL)          //当左子树非空
                Push(st, p->left);    //左孩子入栈
        }
        printf("\n");
    }
    DestroyStack(st);
}

なるほど、最初にここに追加し、残り明日、それを続けてください!

おすすめ

転載: www.cnblogs.com/kangna/p/11846156.html