劍指offer 二叉樹與雙向鍊錶

2021-10-19 15:20:47 字數 988 閱讀 2080

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。

1、乙個小點,二叉搜尋樹即為二叉排序樹,中序遍歷的結果為乙個遞增的陣列,因此這個題首先基本思路是進行二叉樹的中序遍歷。

//二叉樹中序遍歷遞迴的**如下:

void

midorder

(treenode* prootoftree)

midorder

(prootoftree-

>left)

; cout<>val;

midorder

(prootoftree-

>right)

;}

2、因為不能建立新的節點,只能改變原結點的指標,因此可以在中序遍歷中多新增乙個pre指標,用來儲存上乙個遍歷的節點,該節點即為當前節點的left,本來我想的是在midorder函式中新增乙個引數pre的,但是在執行時發現出現了錯誤,仔細分析後發現,如果將pre設為函式的引數,則只有在二叉樹的所有右分支中pre的值才會改變,因此pre應該設定為全域性變數,在每一次呼叫midorder函式時該變數的值都應該根據實際情況改變。

該題**如下:

/*

struct treenode

};*/

class

solution

void

midorder

(treenode* prootoftree)

midorder

(prootoftree-

>left)

; pre-

>right=prootoftree;

prootoftree-

>left=pre;

pre=prootoftree;

midorder

(prootoftree-

>right);}

};

劍指Offer 樹 二叉樹與雙向鍊錶

要把一棵二叉樹轉變成雙向鍊錶,二叉樹和雙向鍊錶很類似,每個節點都是包括乙個值和兩個指標。針對這題,思路還是遞迴,選擇的是樹的中序遍歷,中序遍歷是按照從小到大的順序遍歷二叉搜尋樹的每乙個節點,得出來的序列是有序的,注意只有二叉搜尋樹才有這個特性。這道題最重要的過程在於調整原來樹節點的指標,使得當前節點...

劍指offer題解(二叉樹與雙向鍊錶)

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。中序遍歷搜尋二叉樹,用pre儲存中序遍歷的前乙個節點,cur為當前節點,然後使pre right cur,cur left pre 注意pre要宣告為常指標,初始時pre為空 最後從根節...

劍指offer 二叉樹 二叉搜尋樹與雙向鍊錶

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。這道題太難了,我不會做t t,直接引入參 吧。coding utf 8 class treenode def init self,x self.val x self.left ...