二叉樹三叉鏈中序非遞迴

2021-10-10 22:59:15 字數 870 閱讀 4226

(二叉樹採用三叉鍊錶的儲存結構,編寫

不借助棧的非遞迴中序遍歷演算法)

三叉鍊錶型別定義:

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...