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

2021-05-26 19:12:06 字數 1548 閱讀 7503

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

題目:輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。

要求不能建立任何新的結點,只調整指標的指向。

10/ \

6 14

/ \ / \

4 8 12 16

轉換成雙向鍊錶

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

首先我們定義的二元查詢樹節點的資料結構如下:

struct bstreenode

;思路:二元查詢樹的規律是做子樹的所有節點小於根節點,右子樹的所有節點大於根節點,可以推斷出轉成雙向鍊錶後,根節點的前乙個節點為左子樹的最大值,即左子樹最右邊的節點,根節點的後乙個節點為右子樹的最小值,即右子樹最左邊的節點。

利用樹的遞迴的性質,每個非葉子節點都可以找到前節點和後節點。對於葉子節點,他的前節點 和 後節點肯定都不是葉子節點,所以可以用下面的偽**來實現

void tranfertodoublelinkedlist(bstreenode *tree)

if (tree->m_pright)

}

下面是完整的原始碼:

/*

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

題目:輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。

要求不能建立任何新的結點,只調整指標的指向。

10/ \

6 14

/ \ / \

4 8 12 16

轉換成雙向鍊錶

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

首先我們定義的二元查詢樹節點的資料結構如下:

struct bstreenode;*/

#ifndef interview_1_h

#define interview_1_h

class bstreenode

;class bstree

bstreenode* getmaxelement() const;

bstreenode* getminelement() const;

void generatedoublelikedlist();

private:

bstreenode *root;

};#endif //interview_1_h

#include "interview_1.h"

#include using namespace std;

bstreenode* bstree::getmaxelement() const

return max;

}bstreenode* bstree::getminelement() const

bstreenode *min = root;

while(min->m_pleft)

return min;

}void bstree::generatedoublelikedlist()

if (root->m_pright != null)

}

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

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...

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

這些演算法的思路很多我不會的話都參考了july演算法的思想,特此宣告一下,我只是給出我的具體實現 把二元查詢樹轉變成排序的雙向鍊錶 題目 輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。10 6 14 4 8 12 16 轉換成雙向鍊錶 4 6...