《劍指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...