1. 程式人生 > 其它 >c++建立二叉樹,後序遍歷非遞迴輸出

c++建立二叉樹,後序遍歷非遞迴輸出

技術標籤:資料結構基礎演算法

後序遍歷需要藉助一個pre指標來判定之前走過的路徑。
後序遍歷過程中節點可以訪問的標誌是,當前節點沒有孩子,或者當前節點的前一個節點是左右孩子中的一個。

#include<iostream>
#include<stack>
using namespace std;
struct Node{
	char data;
	Node *lchild;
	Node *rchild;
};
Node*createTree(){
	char x;
	cin>>x;
	if(x=='#')return NULL;
	Node *root=
new Node; root->data=x; root->lchild=createTree(); root->rchild=createTree(); return root; } void postTraversal(Node*root) { stack<Node*>s; Node *cur; Node *pre=NULL; s.push(root) ; while(!s.empty()){ cur=s.top(); if((cur->lchild==NULL&&cur->rchild==NULL)|| (
pre!=NULL&&(pre==cur->lchild||pre==cur->rchild)) ){//如果當前節點沒有孩子,或者前一個節點是當前的左右孩子之一,都可以訪問了。 cout<<cur->data<<" "; s.pop(); pre=cur; } else{ if(cur->rchild!=NULL) s.push(cur->rchild); if(cur->lchild!=NULL) s.push(cur->lchild)
; } } } int main(){ //測試用例:1 2 4 # # 5 # # 3 # # Node *root=createTree(); postTraversal(root); return 0; }

在這裡插入圖片描述