一般化テーブルに基づいてツリーを構築する
1880 ワード
配列形式で木を作るのは簡単で、表面的にはスタックの知識を必要としないし、構造体で木を作る方法は絶えずpushしなければならないと考えやすい.popよ、そしていつpush、pop、あるいはpush pop何が思いつかないような気がする.例をあげると、配列木を作るのはこのような始まり説明a[i]の左息子a[2*i+1]右息子a[2*i+2]
配列でツリーを構築するアルゴリズムは、配列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;
}
スタックの目的は各層のノードを絶えず記録することであり,これが鍵であり,これを知っていればよいと感じた.
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;
}
スタックの目的は各層のノードを絶えず記録することであり,これが鍵であり,これを知っていればよいと感じた.