尋找二叉樹上從根結點到給定結點的路徑

2022-07-21 05:03:10 字數 783 閱讀 9917

1.遞迴實現

public

static

boolean searchnode(treenode root,stacks,treenode node)

2.非遞迴實現

思想:這個稍微有些複雜,當然也是要借助棧來完成。其實這裡和二叉樹的非遞迴先序遍歷的思想差不多,只是在這個基礎上進行一些改造。首先,新建乙個棧,儲存根節點。然後開始一直向左查詢,查詢的過程中把結點入棧。如果在向左找的過程中遇到了給定的結點,那麼就輸出並返回,這個過程比較好理解。關鍵是下面的彈棧的過程,如果在向左找的過程中遇到了null,說明當前棧頂元素的左子樹為null。那麼我們向棧頂元素的右子樹開始查詢。令p為棧頂元素,如果棧頂元素的右子樹為null,那麼彈出棧頂元素,並用pre來儲存剛彈出的元素,之所以設定pre,是因為如果當前棧頂元素的右子樹不為null的時候,不能輕易彈出,首先得去右子樹上去查詢,如果右孩子被彈出了,說明右子樹上肯定沒有,那麼當前結點才可以彈出。

主要是針對所有節點歇著向左下方搜尋。

public

static

void

searchnode(treenode root,treenode node)

return

; }

p =p.left;

}//走到這一步說明棧頂元素的左子樹為null,那麼就開始往棧頂元素的右子樹上去找。

if(!s.isempty())

//繼續遍歷p的右子樹

p =p.right;}}

}

求二叉樹中從根結點到葉子結點的路徑

實驗題目 求二叉樹中從根結點到葉子結點的路徑 實驗目的 掌握二叉樹遍歷演算法的應用,熟練使用先序 中序 後序3種遞迴 和非遞迴遍歷演算法以及層次遍歷演算法進行二叉樹問題求解。實驗內容 設計程式,完成如下功能 1 採用先序遍歷方法輸出所有從葉子結點到根結點的逆路徑 2 採用先序遍歷方法輸出第一條最長的...

二叉樹根結點到任意結點的路徑

準備明年上半年的軟體水平考試,學習資料結構中。將課後一些有代表性的習題,新增註解,整理後貼出來,可讓自己的思路變得更清晰,更條理,也可與別的學習者們交流 問題描述 設二叉樹以二叉鏈結構儲存,b為指向根結點指標,x為任一結點型別資料,在樹b中尋找x,並列印顯示出經過的路徑 演算法思路 1,定義樹結點型...

輸出二叉樹中所有從根結點到葉子結點的路徑

輸出二叉樹中所有從根結點到葉子結點的路徑.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std struct btnode 先序建立二叉樹 void creatbtree btnode root else 輸出二...