非遞迴的後序遍歷

2021-09-20 21:42:54 字數 840 閱讀 3228

利用中序和前序

int  find(char array, int size, char v)

}return -1;

}node * buildtree1(char preorder,char inorder, int size)

char rootvalue = preorder[0];

int leftsize = find(inorder, size, rootvalue);//i的返回值就是左子樹的個數

//根node *root = (node *)malloc(sizeof(node));

root->value = rootvalue;

//左子樹

root->left = buildtree1(preorder + 1,inorder,leftsize);

//右子樹

root->right = buildtree1(preorder + 1 + leftsize, inorder + leftsize + 1, size-1-leftsize);

return root;

}//需要用到二個指標,last來記錄被完整後序遍歷過的節點

#include

void afterordernor(node *root)

//第二次遇見

node *top = s.top();

if (top->right == null)

else if (top->right == last)

//第三次遇見

else}}

測試:void test()

#include"非遞迴二叉樹.h"

int main()

樹的非遞迴後序遍歷

樹的後序遍歷特點 左 右 根 思路1 先序特點 逆序輸出 先序遍歷特點 根 左 右 在先序非遞迴遍歷 的基礎上可以實現 根 右 左 如果逆序輸出,就是 左 根 右 於是我們需要乙個另外的棧用來逆序輸出。template class t void binarytree postorder 後序遍歷 s...

後序遍歷的非遞迴實現

1 實現後序遍歷的非遞迴2 核心 乙個結點需要彈出兩次,第一次彈出的時候還需要放回原位 左子樹遍歷完畢 第二次彈出的時候才輸出其值 右子樹遍歷完畢 34 5 include 6 include 7 using namespace std 89 struct node 1516 typedef str...

後序遍歷非遞迴演算法的實現

後序遍歷非遞迴演算法的實現 這個是在前面的基礎上,進行後序遍歷非遞迴演算法,這個演算法是很多求二叉樹路徑的基礎,比如求根結點到某點的路徑,或求兩個結點最近的公共祖先等。include include define maxsize 1000 using namespace std typedef st...