刷題找工作(二叉樹)

2021-09-26 19:18:14 字數 1195 閱讀 4637

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

還原二叉樹

看解題**

public class solution 

public treenode dfs(int pre,int in,int prel,int prer,int inl,int inr)

}int leftcount = mid-inl;

int rightcount = inr-mid;

tree.left = dfs(pre,in,prel+1,prel+leftcount,inl,mid-1);

tree.right = dfs(pre,in,prer-rightcount+1,prer,mid+1,inr);

return tree;}}

這道題,我一開始是沒有思路的,看了別人的**,自己再推演一下,大概懂了

一顆樹的根節點中序樹組 一定在中間,也就是說這個根節點 的左子樹一定在陣列當前位置的左邊,

右子樹在根節點的右邊(這裡我說的是二叉樹用中序陣列表示

我們想一下,我們先序遍歷一顆二叉樹 就是用的dfs,那麼我們也可以同樣使用dfs還原這棵樹

因為我們的先序遍歷的答案就是前序陣列,我們只要按照dfs的順序來就行了

那麼解題關鍵就是確定左子樹根節點的位置 和確定右邊子樹根節點的位置,也就是說給出乙個確切的範圍

中序陣列就類似於乙個二分法,用他來確定當前節點的左右子樹

這是先序遍歷後的結果陣列

二叉樹刷題系列( )

本篇文章leetcode題目刷二叉樹的題關鍵在於框架,本質上我們得摸清楚遍歷的情況。在做二叉樹的時候,重點考慮兩個方面。第一,以什麼順序進行遍歷,無非就是前序 後序 中序 層序次序上的變種。對於遞迴函式的呼叫,我們嚴格按照函式給出定義去構建。不需要每次過分糾結在一層層遞迴中,把自己搞暈。因此,遞迴框...

二叉樹刷題總結

1.樹相關的問題一般都是可以使用遞迴進行求解的,同時記住乙個思路就是首先是明確當前根節點需要做什麼,然後依次遞迴去左右子樹做什麼即可!一定要明白的是當前根節點做什麼也等同於當前只有乙個節點之後的時候!2.一般題目中可能有兩種型別,一種是單純的遍歷其中的樹節點去完成一些操作,另外一種是去修改對應樹的結...

牛客刷題二叉樹之對稱二叉樹

請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。用兩種方式,遞迴和非遞迴 一 遞迴方式 struct treenode class solution bool issymmetricalcore treenode left,treenod...