二叉樹 各種遍歷演算法

2021-07-03 07:08:14 字數 1409 閱讀 8682

#include

#include

#include

using

namespace

std;

//二叉樹結點

typedef

struct bitnodebitnode,*bitree;

//按先序序列建立二叉樹

int createbitree(bitree &t)

else

return

0;

} //輸出

void visit(bitree t)

} //先序遍歷

void preorder(bitree t)

} //中序遍歷

void inorder(bitree t)

}

//後序遍歷

void postorder(bitree t)

} /* 先序遍歷(非遞迴)

思路:訪問t->data後,將t入棧,遍歷左子樹;遍歷完左子樹返回時,棧頂元素應為t,出棧,再先序遍歷t的右子樹。

*/void preorder2(bitree t)

else

}//while

} /* 中序遍歷(非遞迴)

思路:t是要遍歷樹的根指標,中序遍歷要求在遍歷完左子樹後,訪問根,再遍歷右子樹。

先將t入棧,遍歷左子樹;遍歷完左子樹返回時,棧頂元素應為t,出棧,訪問t->data,再中序遍歷t的右子樹。

*/void inorder2(bitree t)

else

}//while

} //後序遍歷(非遞迴)

typedef

struct bitnodepostbitnodepost,*bitreepost;

void postorder2(bitree t)

//左右子樹訪問完畢訪問根節點

while(!stack.empty() && (stack.top())->tag == 'r')

//遍歷右子樹

if(!stack.empty())

}//while

} //層次遍歷

void levelorder(bitree t)

//右子樹不空,將右子樹入隊

二叉樹的各種遍歷演算法

typedef struct treenode int data struct treenode left struct treenode right int flag 該標記用於後序非遞迴遍歷 ptree 先序遞迴遍歷 void bt preorder ptree root if root nul...

二叉樹遍歷的各種演算法

二叉樹的遍歷是指按照一定次序訪問二叉樹中的所有節點,且每個節點僅被訪問一次的過程。是最基本的運算,是其他運算的基礎。二叉樹有兩種儲存結構 順序儲存和鏈式儲存 順序儲存 對完全二叉樹來說,可以充分利用儲存空間,但對於一般的二叉樹,只有少數的儲存單元被利用 cpp view plain copy typ...

演算法之二叉樹各種遍歷

樹形結構是一類重要的非線性資料結構,其中以樹和二叉樹最為常用。二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹 不存在度大於2的結點 ...