(二叉樹採用三叉鍊錶的儲存結構,編寫
不借助棧的非遞迴中序遍歷演算法)
三叉鍊錶型別定義:
typedef struct tritnode tritnode, *tritree;
思路為:1 先向左走到盡頭,訪問了最左結點
2 判斷是否有右結點,若有(遍歷完右子樹再上去p->parent){
p指向p->rchild,回到上**最上,判斷p是否有左結點
}若無,{
pre指向p,p指向parent,訪問parent(訪問條件,必須是從左子樹上來的才訪問,右子樹上來不訪問p->lchild == pre時訪問)
}3 在訪問了parent結點後,
(1)parent無右結點,再向上走,繼續訪問
(2)parent有右結點,指向右結點,回到**頭
void inorder(tritree pt, void (visit)(telemtype))
/ 不使用棧,非遞迴中序遍歷二叉樹pt, /
/ 對每個結點的元素域data呼叫函式visit */
//當左子樹空的時候
if( p )
//遍歷完本節點,左子樹一定已經遍歷過了,所以此時考慮是否往右走,右子樹不為空的話,一定要往右邊走
if(p -> rchild != null)
else
}while((p->lchild == pre && p -> rchild == null) || p->rchild == pre);
//這裡往右邊走是遍歷完左子樹後
if(pre == p->lchild && p -> rchild != null)
}
}
二叉樹中序非遞迴遍歷
definition for a binary tree node.struct treenode class solution else return out 中序非遞迴遍歷de演算法思想 根據中序遍歷的順序,對於任意乙個結點,優先訪問左孩子,再繼續訪問該左孩子的左孩子,然直到遇到左孩子結點為空的...
先序遞迴構造二叉樹 中序遞迴遍歷二叉樹
include stdio.h include malloc.h typedef struct bitnodebitnode,bitree char ch abc de g f int i 0 int createbitree bitree t else return 1 void preorder...
非遞迴二叉樹
由於棧和遞迴原理相同,且遞迴建立二叉樹的效率較低,所以我們可以借助棧來實現二叉樹的非遞迴建立以及遍歷。include include using namespace std template struct binarytreenode template class binarytree binary...