// 排序二叉樹與雙向鍊錶.cpp : 定義控制台應用程式的入口點。
// 題目描述:輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
// 思路:通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的
// 通過後序遍歷讓子樹分別找到自己的left和right結點,然後再與根節點相結合,
// 結合原則:乙個結點的left是左子樹的最右孩子,乙個結點的right是右子樹的最左孩子
// 通過後序遍歷就不必儲存中間結果。
#include "stdafx.h"
struct treenode
};treenode* dfs(treenode* prootoftree);
treenode* findleft(treenode* prootoftree); // 宣告著大批左節點函式,指向左子樹的最右孩子
treenode* findright(treenode* prootoftree); //宣告找到右結點函式,指向右子樹的最左孩子
treenode* convert(treenode* prootoftree)
treenode* res = tmp;
/*while (tmp->right != null) */
return res;
}treenode* dfs(treenode* prootoftree)
treenode* findleft(treenode* prootoftree)
return tmp;
}treenode* findright(treenode* prootoftree)
return tmp;
}int main() //生成測試資料
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
要求 輸入棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的節點,只能調整樹種結點指標的指向。具體見劍指offer題27。分析 在二叉樹中,每個節點都有兩個指向子節點的指標。而在雙向鍊錶中,每乙個節點也有兩個指標,分別指向向前和後向的節點。因此這兩種資料結構有相似之處,並且二...