一般化テーブルに基づいてツリーを構築する

1880 ワード

配列形式で木を作るのは簡単で、表面的にはスタックの知識を必要としないし、構造体で木を作る方法は絶えずpushしなければならないと考えやすい.popよ、そしていつpush、pop、あるいはpush pop何が思いつかないような気がする.例をあげると、配列木を作るのはこのような始まり説明a[i]の左息子a[2*i+1]右息子a[2*i+2]
A(B(D),C)

配列でツリーを構築するアルゴリズムは、配列char a[100]を作成し、中間値をcurrent_と呼ぶ.indexバーの初期値は0です.そしてこの文字列を読み続け、1つ1つ読み、アルファベットに遭遇し、a[current_index]は現在の文字に等しく、左括弧current_に遭遇する.index=current_index*2+1、カンマcurrent_に遭遇index=current_index+1
右かっこ判定current_に遭遇indexパリティcurrent_indexは奇数で1を2で割って偶数で2を2で割って
そして構造体で木を作るとスタックが使われますが、実は配列で原理的にスタックも使われていますが、感じられません
计算の授业の上のコードから摘み取ってあなた达に色になって滑稽に见やすくてコードに従って人工的に一回走って彼の意味を理解することができて、しかし私はやはり思い出せないような気がします
Node *build(char *s,int len)
{
    stacksta;
    const int left = 1,right = 2;
    int flag = 0;
    Node *rootnode = NULL;
    Node *currnode = NULL;
    int index = 0;
    char c = s[index];
    while (index < len) {
        switch (c){
            case '(':
                flag = left;
                sta.push(currnode);
                break;
            case ',':
                flag = right;
                break;
            case ')':
                sta.pop();
                break;
            default:
                currnode = init(c);
                if (rootnode == NULL)
                    rootnode = currnode;
                else if (flag == left) {
                    sta.top()->lchild = currnode;
                }
                else if (flag == right) {
                    sta.top()->rchild = currnode;
                }
                break;
        }
       //rootnode = init(c);
        c = s[++index];
    }
    return rootnode;
}
スタックの目的は各層のノードを絶えず記録することであり,これが鍵であり,これを知っていればよいと感じた.