把二叉查詢樹轉變成排序的雙向鍊錶

2021-06-08 23:09:39 字數 695 閱讀 8906

問題:

給乙個二叉查詢樹,把它轉化成排序的雙向鍊錶,要求是不能使用額外的空間(常數空間是允許的)。

例如:該二叉查詢樹的雙向鍊錶結構是 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...