二叉樹的遞迴和非遞迴遍歷

2021-05-28 15:38:13 字數 763 閱讀 6126

43.遞迴和非遞迴倆種方法實現二叉樹的前序遍歷。

分析:遞迴遍歷簡單明瞭,不羅嗦,非遞迴形式可以使用堆疊實現。

//前序遍歷 遞迴方式

void preorder1(bstreenode *pnode)

//前序遍歷 非遞迴方式

void preorder2(bstreenode *pnode)

}

前序遍歷是典型的尾遞迴,很好消除,對於後序遍歷和中序遍歷的實現就稍微複雜一些了,需要附加變數來記錄是否訪問過。在二叉樹結構體中新增 bool    m_bvisit;

後序遍歷,中序遍歷的實現**。

//後序遍歷 遞迴

void postorder1(bstreenode *pnode)

//後序遍歷 非遞迴

void postorder2(bstreenode *pnode) }}

//中序遍歷 遞迴

void inorder1(bstreenode *pnode)

//中序遍歷 非遞迴

void inorder2(bstreenode *pnode)

if(pnode->m_pright!=null&&pnode->m_pright->m_bvisit==false) //存在右子樹,並且未訪問

bststack.push(pnode->m_pright);

else //不存在左右子樹,或都已經訪問

}}}

二叉樹遞迴遍歷和非遞迴遍歷

用遞迴和非遞迴實現二叉樹的前序遍歷 中序遍歷和後序遍歷並列印出相應結果。private class treenode 在遞迴呼叫時候系統自動給我們建立棧來儲存資料,而使用非遞迴時候需要我們自己實現棧來儲存資料。遞迴實現前序遍歷public void preorder treenode root sy...

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

二 叉樹是一種非常重要的資料結構,很多其它資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹,有前序 中序以及後序三種遍歷方法。因為樹的定義本身就是 遞迴定義,因此採用遞迴的方法去實現樹的三種遍歷不僅容易理解而且 很簡潔。而對於樹的遍歷若採用非遞迴的方法,就要採用棧去模擬實現。在三種遍歷中,前序和中...

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

二叉樹的中序遍歷 二叉樹的後序遍歷 測試二叉樹的節點定義如下 節點 二叉樹的前序遍歷順序為 根左右。如下圖所示,前序遍歷順序為 1245367。遞迴 public static void preorder treenode root system.out.print root.val preorde...