後序拓展序列與相關(基於鍊錶實現)

2021-07-30 12:38:32 字數 1473 閱讀 3515

序:

構造出一棵二叉樹的方法有很多,基於*序拓展序列也可以構造出亦可唯一的一棵二叉樹,本文給出基於後序拓展序列生成二叉樹(基於鍊錶實現)。

何謂後續拓展序列?

後續拓展序列指在二叉樹的後續遍歷序列中增加空節點的序號

input

一行字元,即擴充套件後序序列
output

輸出對應的前序遍歷結果
思路:

通過來實現。

從字串頭開始,如果是空節點進棧,否則就是非空節點,將最後兩個提出,與該節點建立關係(根左右),再將該節點入棧。走完整個字串,最後整棵二叉樹便建成了。

原因:

由於加入了空序號,那麼這棵二叉樹是一棵完全二叉樹。那麼後續序列一定嚴格滿足左右根的順序,並且在同一級。

源**:

/*

about: binary tree-postorder

auther: kongse_qi

date:2017/03/15

*/#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 10005;

typedef

struct qi_qi;//二叉樹的組成

char a[maxn];

qi *x[maxn];

int end;

inline qi *build(char a)//建樹

inline qi* to(qi* a, qi* b, qi* c)//標記出關係

void search(qi* curr)//輸出

int main()

else x[end++] = build('.');

}search(x[end-1]);

return

0;}

拓展:

求某節點與根節點的距離:

只需要將輸出函式修改一下:

void search(qi* curr)

備註:

鍊錶建樹會比直接使用陣列要慢。用陣列分別存左右孩子的節點,思路與鍊錶相同,只是寫法稍有區別,故不給出**。

自此完成。

箜瑟_qi 2017.04.13 21:22

後序拓展序列與相關(基於陣列實現)

樸素陣列 about binary tree postorder auther kongse qi date 2017 04 15 include define maxn 20005 using namespace std int n,x maxn xx,ans 1 int l maxn r max...

鍊錶的相關實現

class node public class lianbiao else head node size 頭刪 public void popfront head head.next if head null else size 尾插 void pushback int val else size ...

棧的實現(基於鍊錶)

首先定義乙個介面 基於已寫好的鍊錶實現的棧 public inte ce stack定義乙個棧的類,繼承stack介面 基於鍊錶實現棧 author hcc 鍊錶的開頭是棧底,鍊錶的末尾是棧頂 public class linkedstackimplements stack override pub...