数据结构---后序和中序遍历的二叉树序列还原二叉树
生活随笔
收集整理的這篇文章主要介紹了
数据结构---后序和中序遍历的二叉树序列还原二叉树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構—后序和中序遍歷的二叉樹序列還原二叉樹
代碼:
#include<stdio.h> #include<stdlib.h> typedef struct bstTree {char data;struct bstTree* lchild, *rchild; }bstTree; bstTree * reStoreTree(char* pre, int preSt, int preEnd, char *mid, int midSt, int midEnd) {//通過前序和中序二叉樹遍歷還原樹if (preSt > preEnd) {return NULL;//如果找不到左子樹了則返回NULL }char rs = pre[preSt];int j;for (j = midSt; j <= midEnd; j++) {if (rs == mid[j]) {break;//在中序序列中找到當前的根節點}}if (j > midEnd) {printf("中序序列有誤!\n");return NULL;//不再進行下面子樹的操作}int gapLength = j - midSt;//左右子樹跟結點的尋找范圍bstTree* root = (bstTree*)malloc(sizeof(bstTree));root->data = rs;root->lchild = reStoreTree(pre, preSt + 1, preSt + gapLength, mid, midSt, j - 1);root->rchild = reStoreTree(pre, preSt + gapLength + 1, preEnd, mid, j + 1, midEnd);return root; } bstTree * reStoreTree1(char* last, int lastSt, int lastEnd, char *mid, int midSt, int midEnd) {//通過前序和中序二叉樹遍歷還原樹if (lastSt > lastEnd) {return NULL;//如果找不到左子樹了則返回NULL}char rs = last[lastEnd];int j;for (j = midSt; j <= midEnd; j++) {if (rs == mid[j]) {break;//在中序序列中找到當前的根節點}}if (j > midEnd) {printf("中序序列有誤!\n");return NULL;//不再進行下面子樹的操作}int gapLength = j - midSt;//左右子樹跟結點的尋找范圍bstTree* root = (bstTree*)malloc(sizeof(bstTree));root->data = rs;root->lchild = reStoreTree(last, lastSt, lastEnd - gapLength-1, mid, midSt, j - 1);root->rchild = reStoreTree(last, lastEnd - gapLength, lastEnd-1, mid, j + 1, midEnd);return root; } void prePrint(bstTree* BSTTree) {//前序遍歷二叉樹if (BSTTree) {printf("%c ", BSTTree->data);prePrint(BSTTree->lchild);prePrint(BSTTree->rchild);} } int main() {char pre[4] = "ABC";char mid[4] = "BAC";char last[4] = "BCA";//bstTree* root = reStoreTree(pre, 0, 2, mid, 0, 2);//根據前序和中序構造的二叉樹bstTree* root = reStoreTree1(last, 0, 2, mid, 0, 2);//根據后序和中序構造的二叉樹printf("前序遍歷根據后序和中序構造的二叉樹\n");prePrint(root);//前序遍歷二叉樹printf("\n");system("pause");return 0; }測試截圖:
時間復雜度O(n),空間復雜度O(logn)
c語言字符串的學習參考鏈接:https://blog.csdn.net/beyond_yourself/article/details/108889618
如果存在什么問題,歡迎批評指正!謝謝
總結
以上是生活随笔為你收集整理的数据结构---后序和中序遍历的二叉树序列还原二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这3种序列填充的方法怎么填充序列
- 下一篇: 数据结构---顺序查找和二分查找