問題:
給乙個二叉查詢樹,把它轉化成排序的雙向鍊錶,要求是不能使用額外的空間(常數空間是允許的)。
例如:該二叉查詢樹的雙向鍊錶結構是 1 = 3 = 4 = 6 = 7 = 8 = 10 = 13 = 14
分析:二叉查詢樹具有非常鮮明的遞迴結構,因此,在解決這道問題時,我們無可避免的會想到用遞迴。關鍵是如何遞迴呢?
因為乙個節點總是有乙個左節點和右節點(如果存在),對於節點 n, 只要把左節點子樹的最大值返回給n,那麼, 那個最大值就是 n 的前乙個節點,比如對於節點8, 它的左節點子樹的最大值是7,那麼節點8的前乙個節點就是7,同理,節點7的下乙個節點是8. 對於右節點子樹也還是一樣。有了這樣的思路,寫**不是一件何難的事情了。
public class treetolist
}// isright is used to check nd is
// in the right subtree or left substree
static node convertnode(node nd, boolean isright)
if (nd.right != null)
node temp = nd;
if (isright)
} else
} return temp; }}
class node
}參考:
二叉排序樹轉變成排序的雙向鍊錶
輸入一棵二叉查詢樹,將該二叉查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。舉例 10 6 14 4 8 12 16 轉換成雙向鍊錶 4 6 8 10 12 14 16 題目要求不能建立任何新的結點,只需要調整指標的指向,那麼就意味著可直接利用二叉樹的結點,通過變更結點的...
把二元查詢樹轉變成排序的雙向鍊錶
1.首先是如何建立乙個二叉查詢樹 2.再對二叉查詢樹進轉換 如下 bstreenode1.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std struct bstreenode typedef bstreenode doubl...
把二元查詢樹轉變成排序的雙向鍊錶
把二元查詢樹轉變成排序的雙向鍊錶 題目 輸入一棵二元查詢樹,將該轉換成個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標向。include include typedef struct bittree bittree void addnode bittree root,int value p r...