樹的遍歷 後序

2021-04-20 05:38:12 字數 792 閱讀 7382

感覺上在樹的遍歷型別中,屬後根序遍歷的非遞迴實現最不好寫。

下面演算法取自:http://topic.csdn.net/t/20021018/17/1107596.html

typedef  struct      mark;  

}   pmtype;   //有mark域的結點指標型別    

void   postorder_stack(bitree   t)//後續遍歷二叉樹的非遞迴演算法,用棧  

);   //根結點入棧  

while(!stackempty(s))  

);   //修改mark域  

if(a.ptr->lchild)   push(s,);   //訪問左子樹  

break;  

case   1:  

push(s,);   //修改mark域  

if(a.ptr->rchild)   push(s,);   //訪問右子樹  

break;  

case   2:  

visit(a.ptr);   //訪問結點,返回  

}  

}//while  

}//postorder_stack  

分析:為了區分兩次過棧的不同處理方式,在堆疊中增加乙個mark域,mark=0表示剛剛訪問此結點,mark=1表示左子樹處理結束返回,mark=2表示右子樹處理結束返回.每次根據棧頂元素的mark域值決定做何種動作.  

樹的前中後序遍歷

include include typedef int datatype typedef struct bnode btree t 建立二叉樹 結點 btree t create bnode datatype data bzero tree,sizeof btree t tree data data...

樹的非遞迴後序遍歷

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

樹的遍歷 先序遍歷 中序遍歷 後序遍歷

名詞解釋 1 每個元素稱為節點 2 有乙個特定的節點被稱為根節點或樹根 3 除根節點外的其餘資料元素被分為m個互不相交的集合t1,t2,t3.tm 1,其中每乙個集合ti本身也是乙個樹,被稱作原樹的子樹 節點的度 乙個節點含有子樹的個數稱為該節點的度 葉節點或終端節點 度為0的節點稱為葉節點 非終端...