輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
前面有道也是關於的二叉搜尋樹的筆記提到搜尋二叉樹的特點
左子樹的數值小於根節點,右子樹的數值大於根節點
二叉搜尋樹的子樹也是二叉搜尋樹
根據上述的特點和所需要的有序結果,採取中序遍歷的方式來遍歷該二叉搜尋樹,便會得到乙個有序的雙向鍊錶
按中序遍歷完之後指標會知道鍊錶中的最後乙個結點,而需要返回表頭,所以需要找到頭結點
/*
struct treenode
};*/
class solution
return pheadoflist;
}void convertnode(treenode* pnode,treenode** plastnodeinlist)
*plastnodeinlist=pcurrent;
//遞迴右子樹
if(pcurrent->right!=null)}};
二叉樹應用 二叉搜尋樹與雙向鍊錶
題目 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的節點,只能調整樹中節點的指向。分析 由於要求轉換之後的鍊錶是排好序的,我們採用中序遍歷,遍歷樹中的每乙個節點。根節點 左子樹和右子樹。在把左 右子樹都轉換成雙向鍊錶之後再和根節點連線起來,整顆二叉樹就轉換成了排序好...
刷演算法 二叉搜尋樹與雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。如果是這樣一棵二叉搜尋樹 那麼它對應的雙向鍊錶順序為 1 3 4 5 7 10 11 15 複製 仔細觀察發現這個序列和樹的中序遍歷是一樣的,所以演算法就好寫了,先中序遍歷得到乙個序列,...
二叉樹轉雙向鍊錶
include using namespace std 樹節點 struct node typedef struct node link 構造樹 void insert tree link h,int t if h val t insert tree h left,t else insert tre...