题解 | #二叉搜索树与双向链表#

二叉搜索树与双向链表

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;//返回中序遍历的一个节点指针
}

全部评论

相关推荐

巨人网络 测试 总包20左右
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务