BM30 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示
解法(递归)
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
*
* @param pRootOfTree TreeNode类
* @return TreeNode类
*/
typedef struct TreeNode* pnode;
static pnode convert(pnode root) {
if (!root)return root;
convert(root->left);
convert(root->right);
if (root->left) {
struct TreeNode* p = root->left;
while (p->right) {
p = p->right;
}
p->right = root;
root->left = p;
}
if (root->right) {
struct TreeNode* p = root->right;
while (p->left) {
p = p->left;
}
p->left = root;
root->right = p;
}
return root;
}
struct TreeNode* Convert(struct TreeNode* pRootOfTree ) {
// write code here
if (!pRootOfTree)return pRootOfTree;
convert(pRootOfTree);
pnode p = pRootOfTree;
while (p->left)p = p->left;
return p ;
}