二叉樹的遍歷(遞迴法和非遞迴法)

2021-09-12 08:09:01 字數 1123 閱讀 9075

所謂的二叉樹是指樹中所有節點的子節點個數都不超過2的樹。對於二叉樹,有深度遍歷和廣度遍歷,深度遍歷有前序、中序以及後序三種遍歷方法,廣度遍歷即我們平常所說的層次遍歷。

前序遍歷首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左、右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。

若二叉樹為空則結束返回,否則:

(1)訪問根結點。

(2)前序遍歷左子樹。

(3)前序遍歷右子樹 。

需要注意的是:遍歷左右子樹時仍然採用前序遍歷方法。

類似的:

前序遍歷:根左右

中序遍歷:左根右

後序遍歷:左右根

層次遍歷:從上到下,從左到右。

首先構建二叉樹

//節點結構體

struct node

};//構建二叉排序樹

void inertnode(node *node,int value)

else

}else

else

}}

遞迴實現:

//前序遍歷遞迴實現

void preorder(node *node)

}//中序遍歷遞迴實現

void inorder(node *node)

}//後序遍歷遞迴實現

void posorder(node *node)

}

非遞迴實現

//前序遍歷非遞迴實現

void preorder1(node *node)

stacknstack;

nstack.push(node);

while(!nstack.empty())

if(temp->left)

} }//中序遍歷非遞迴實現

void inorder1(node *node)

else

}}//後序遍歷非遞迴實現

void posorder1(node *node)

while(!nstack2.empty())

遞迴法(非遞迴法)遍歷二叉樹

2.4 用 遞迴法 非遞迴法 實現先序遍歷 中序遍歷和後序遍歷函式,要求遍歷時能執行一定的操作,且該操作可由遍歷函式的呼叫者來設定。define tree type int typedef struct tree nodetreenode 先序遍歷與建立二叉樹 遞迴法 include tree.h ...

二叉樹的三種遍歷 非遞迴法

二叉樹的三種遍歷我們都知道有 前序遍歷 中序遍歷和後序遍歷。對於這三種遍歷的遞迴寫法,我們會覺得十分好理解,但是發現對於其非遞迴寫法還是認為很複雜。所以就記錄於此,希望有一天都能憑藉自己本事寫出來。加油 listres new arraylist 前序遍歷 非遞迴 寫法 param node pub...

遞迴法進行二叉樹同構判定

include define maxtree 100 define elementtype char define tree int 定義乙個樹的結構體,這裡採用乙個靜態鍊錶儲存 struct treenodet1 maxtree t2 maxtree 建立樹的函式 int buildtree st...