题解 | #二叉搜索树与双向链表#
二叉搜索树与双向链表
https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
*
* @param pRootOfTree TreeNode类
* @return TreeNode类
*/
static struct TreeNode* pre =NULL;
//中序遍历
void mid(struct TreeNode* p ){
if(!p){ //出口条件,节点为空
return ;
}
mid(p->left);//遍历左结点
p->left=pre;//前驱节点设为pre;
if(pre!=NULL)
pre->right=p;//后继节点设为p; !!!注意pre是一个指针,它指向p前面的那个节点
pre=p;
mid(p->right);//遍历右结点
}
struct TreeNode* Convert(struct TreeNode* pRootOfTree ) {
// write code here
//struct TreeNode* pre = NULL;
if (pRootOfTree != NULL) {
mid(pRootOfTree);//中序遍历
pre->right = NULL;//将最后一个节点的后继记为空
}
if (pRootOfTree)//判断节点非空
while (pRootOfTree->left != NULL) {//一直遍历左结点直到为空
pRootOfTree = pRootOfTree->left;
}
return pRootOfTree;//返回中序遍历的一个节点指针
}
文远知行公司福利 521人发布