遞迴法:
/*
本題算是簡單的模擬和分治,根據我們依據前序和中序找後序的原則,
前序中給出根節點,在中序中找出此根節點便可以得到左右子樹,分別在左右子樹中分治進行。
*/ #include#includevoid getpost(char pre,char in,char post,int len)
}//根節點左邊的是左子樹,右邊是右子樹
getpost(pre+1,in,post,i);
getpost(pre+i+1,in+i+1,post+i,len-i-1);
} int main()
return 0;
}
非遞迴法:根據前序、中序結果還原樹,再後序遍歷輸出
#include #include #include using namespace std;
struct nodetree[50]; //靜態記憶體分配陣列
int loc; //靜態陣列中已經分配的結點個數
node *create()
char str1[30],str2[30]; //儲存前序和中序遍歷結果字串
void postorder(node *t)
if(t->rchild != null)
printf("%c",t->c);
}node *build(int s1,int e1,int s2,int e2)
}if(rootindex != s2)
if(rootindex != e2)
return ret;
}int main()
return 0;
}
由先序遍歷和中序遍歷生成二叉樹
生成演算法是遞迴的,對於先序序列來講,第乙個元素就是當前子樹的根節點,對於中序序列來講,每乙個中序序列都會被分割為兩個部分,這兩個部分就是下一次的要構造的子樹,所以說生成子樹的過程是自頂向下的 public class gentree string rootdata pre 0 string lef...
先序中序重建二叉樹
includeusing namespace std vectorpre,in int p typedef struct node vectorpost int rec int l,int r 通過前序和後序得到樹 int main for int i 0 i tem in.push back te...
先序中序轉二叉樹
在紙上計算一下他們轉的過程就很容易發現規律 寫程式更簡單,只需要計算出每個子樹的起始位置 計算的時候使用靜態鍊錶更為方便 include include include include include using namespace std struct node vector int in,pre...