《劍指Offer》面試題27 二叉搜尋樹與雙向鍊錶

2021-08-21 07:49:31 字數 2413 閱讀 4804

《劍指offer》面試題27:二叉搜尋樹與雙向鍊錶

二叉樹和鍊錶

二叉樹結點定義如下:

測試用例

/* 《劍指offer——名企面試官精講典型程式設計題》**

著作權所有者:何海濤*/

#include using namespace std;

struct binarytreenode

;void convertnode(binarytreenode* pnode, binarytreenode** plastnodeinlist);

binarytreenode* convert(binarytreenode* prootoftree)

void convertnode(binarytreenode* pnode, binarytreenode** plastnodeinlist)

// ********************測試**********************

void printdoublelinkedlist(binarytreenode* pheadoflist)

printf("\nthe nodes from right to left are:\n");

while (pnode != null)

printf("\n");

}void destroylist(binarytreenode* pheadoflist)

}binarytreenode* createbinarytreenode(int value)

void connecttreenodes(binarytreenode* pparent, binarytreenode* pleft, binarytreenode* pright)

}void printtreenode(binarytreenode* pnode)

else

printf("\n");

}void printtree(binarytreenode* proot)

}void destroytree(binarytreenode* proot)

}void test(char* testname, binarytreenode* prootoftree)

// 10

// / \

// 6 14

// /\ /\

// 4 8 12 16

void test1()

// 5

// /

// 4

// /

// 3

// /

// 2

// /

// 1

void test2()

// 1

// \

// 2

// \

// 3

// \

// 4

// \

// 5

void test3()

// 樹中只有1個結點

void test4()

// 樹中沒有結點

void test5()

int main()

/*

struct treenode

};*/

class solution

return pheadoflist;

}private:

void convertnode(treenode* pnode, treenode **plastnodeinlist )

};

劍指offer 面試題27 二叉搜尋樹與雙向鍊錶

題目 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶,要求不能建立任何新節點,只能調整樹中結點指標的指向。最後輸出排序後雙向鍊錶。基本思想 二叉樹中每個節點都有兩個指向子節點的指標。在雙向鍊錶中,每個節點也有兩個指標,分別指向前乙個節點和後乙個節點。二叉搜尋樹中,左子節點的值總是小於父節...

劍指Offer 面試題27 二叉搜尋樹與雙向鍊錶

題面 劍指offer p151 牛客網 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。如 如果不考慮箭頭,可以看到4 6 8 10 12 14 16是樹的中序遍歷 因此可以借用中序遍歷的方法進行修改 struct treenode ...

劍指offer面試題27 二叉搜尋樹與雙向鍊錶

題目 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 二叉搜尋樹左小右大,中序遍歷。當前結點左結點連線左子樹最大值,左子樹最大值右結點連線當前節點,以當前結點為最大值,以右子樹和最大值遞迴。include using names...