常見資料結構面試題目(四)

2021-06-29 12:53:08 字數 1477 閱讀 6775

題目:

輸入乙個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。列印出和與輸入整數相等的所有路徑。

例如輸入整數 22 ,如下圖二元樹:

10/     \

5     12

/    \  

4     7 

則列印出兩條路徑:

10, 12和10, 5, 7。

思路:有三種方法:

(1)找出並記錄下從根節點到葉子節點的所有路徑,對每條路徑進行嘗試,找到路徑上節點和為輸入整數的路徑。

(2)改造普通二元樹為雙向二元樹,通過指標便可查詢相鄰的上下級節點。遍歷二元樹,可找到樹上的葉子節點。滿足條件路徑是葉子到根節點路徑的子集。由葉子節點向上查詢,當路徑上節點和為輸入整數,並且到達跟節點時,此路徑滿足條件。

(3)此方法參考演算法中涉及遞迴和回溯。由根節點向葉子節點遍歷,記錄下遍歷路徑。當到達葉子節點,並且路徑和為輸入整數,則此路徑滿足條件;否則該路徑自動廢棄。

方法一與方法二思路基本一致,遍歷二元樹找出所有全通路徑,針對每一條計算經過節點的和,找到符合條件的路徑。**實現如下:

//記錄所有從根節點到葉子節點的路徑

private static list> paths=new arraylist>();

//獲得所有到子節點的路線,記錄到path中

private static void getallpaths(listpath , node node)

node left = node.getleft();

if(left != null)

node right = node.getright();

if(right !=null)

} //尋找路徑上節點和為sum的路徑

private static void getcorrectpath(int sum)

if(total == sum)

} for(listpath : paths)

system.out.println();

} }

方法三核心**如下:
//sum表示整數值,top為經過路徑的節點個數,path用來存放路徑節點。

//符合條件的路徑滿足兩個條件:1)sum逐一減去經過節點值後為0。2)節點節點時葉子節點

void findpath(bitreenode *root, int sum,int top,int path)

}

else

top --; //回溯,當返回後,路徑長度減一

sum += root->data; //sum值回溯

}

方法三成功利用遞迴函式返回特性,程式走完一條路徑後,會自動返回分歧節點,沿另一條路徑繼續執行,由此可遍歷完成所有根節點到葉子節點的路徑。當回到分歧節點後,重點是恢復狀態值,即sum與path值。此方法通過path記錄所經過路徑,且對於公共路徑進行了重複利用。

php 資料結構常見面試題目

1,二叉樹深度優先遍歷和廣度優先遍歷 深度優先遍歷 對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。要特別注意的是,二叉樹的深度優先遍歷比較特殊,克細分為 前序遍歷,中序遍歷,後序遍歷 小竅門 看根節點再前中後?前序遍歷 根節點 左節點 右子樹 中序遍歷 左子樹 根節點 右子樹...

常見資料結構

陣列 array 在程式設計中,為了處理方便,把具有相同型別的若干變數按有序的形式組織起來。這些按序排列的同類資料元素的集合稱為陣列。在c語言中,陣列屬於構造資料型別。乙個陣列可以分解為多個陣列元素,這些陣列元素可以是基本資料型別或是構造型別。因此按陣列元素的型別不同,陣列又可分為數值陣列 字元陣列...

資料結構 面試題

python實現 寫個大概,import re def quick sort alist,first,last if first last return mid value alist first low first high last while low high while low mid va...