題目描述:輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
輸入:輸入可能包含多個測試樣例。
對於每個測試案例,輸入的第一行為乙個數n(0
輸出:對應每個測試案例,
輸出將二叉搜尋樹轉換成排序的雙向鍊錶後,從煉表頭至鍊錶尾的遍歷結果。
樣例輸入:
12 1 0 0 3 0 0
樣例輸出:1 2 3
分析:當讀入乙個數字不為0時,那麼接下來讀入的乙個數字是以當前讀入數字為根節點的左孩子,也就是說,接下來讀入的數字在雙向鍊錶中是當前讀入數字的前驅;當讀入乙個數字為0時,那麼接下來讀入的數字在雙向鍊錶中是當前讀入數字的後繼的後繼。當理解了這之後,可以依次讀入數字,並在乙個雙向鍊錶上插入新節點,當前節點的數字非零時,即在當前節點之前插入乙個新節點作為當前節點的先驅;否則,則在當前節點的後繼之後插入乙個新節點作為後繼的後繼。其中關於雙向鍊錶的插入過程,需要修改前驅的next和後繼的prev指標以及給插入節點的next,prev賦值。
**如下:
// 1503new.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include
struct node
};int main()
}p=p->next;
}else //接下來的讀入是當前讀入的前驅
p=p->prev;}}
while(h->prev!=null)//尋找頭節點
//bool flag=true;
while(h!=null)
p=h;
h=h->next;
delete p;//釋放分配的空間
}printf("\n");}}
return 0;
}
題目1503 二叉搜尋樹與雙向鍊錶
時間限制 1 秒 記憶體限制 128 兆 題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。輸入 輸入可能包含多個測試樣例。對於每個測試案例,輸入的第一行為乙個數n 0 輸出 對應每個測試案例,輸出將二叉搜尋樹轉換成排序的雙向...
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...