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

2021-08-29 23:46:44 字數 809 閱讀 1060

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

【舉例】

10/   \

6     14

/  \     /  \

4   8 12 16

轉換成雙向鍊錶

4=6=8=10=12=14=16

題目要求不能建立任何新的結點,只需要調整指標的指向,那麼就意味著可直接利用二叉樹的結點,通過變更結點的左右孩子的指向,來生成雙鏈表的邏輯關係。問題就變成了:

找當前root結點的左孩子最大的結點left_max,和找當前root結點的右孩子最大的結點right_max然後變更各自的指向,依次遞迴,然後變更指標指向關係:

left_max->rchild   = root  -  root->lchild = left_max

right_max->lchild = root  -  root->rchild = right_max

/******************************************

author:tmw

date:2018-10-25

******************************************/

#include #include typedef struct bitreenode

bitreenode;

bitreenode* tree2dlink(bitreenode* root)

夢想還是要有的,萬一實現了呢~~~~~~~~ヾ(◍°∇°◍)ノ゙~~~~~

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

問題 給乙個二叉查詢樹,把它轉化成排序的雙向鍊錶,要求是不能使用額外的空間 常數空間是允許的 例如 該二叉查詢樹的雙向鍊錶結構是 1 3 4 6 7 8 10 13 14 分析 二叉查詢樹具有非常鮮明的遞迴結構,因此,在解決這道問題時,我們無可避免的會想到用遞迴。關鍵是如何遞迴呢?因為乙個節點總是有...

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

描述 輸入一顆二元查詢樹,將二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立人新建立的結點,只調整指標的指向。我的思路 利用遞迴思想進行解答。1.分解,將結點p分解成左子樹和右自樹兩個部分。2.解決子問題,左子樹變成乙個雙向鍊錶,右子樹變成乙個雙向鍊錶。3.合併,將結點p的left 連線到左子樹中最...

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

把二元查詢樹轉變成排序的雙向鍊錶 題目 輸入一棵二元查詢樹,將該轉換成個排 序的雙向鍊錶。要求不能建立任何新的結點,只調整指標向。10 6 14 4 8 12 8 轉換成雙向鍊錶 4 6 8 10 12 14 16 利用中序遍歷來解決比較簡單,這裡我主要提供一種非遞迴版本來解決這個問題 遞迴版本 c...