由二叉樹的先序和中序結果求取後序結果

2021-07-10 22:36:51 字數 964 閱讀 7488

遞迴法:

/*

本題算是簡單的模擬和分治,根據我們依據前序和中序找後序的原則,

前序中給出根節點,在中序中找出此根節點便可以得到左右子樹,分別在左右子樹中分治進行。

*/ #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...