zoukankan      html  css  js  c++  java
  • [剑指Offer]36-二叉搜索树与双向链表

    链接

    https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

    题意

    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

    解题思路

    中序遍历,
    若左子树不为空,找到!左子树转换成的链表的最后一个节点,并与根结点双向相连,
    若右子树不为空,找到!右子树转换成的链表的首节点,并与根结点双向相连。
    若左子树不空,返回左子树转成链表的首节点,否则,返回根节点。=》目标是返回整个链表的头部。

    采用递归写法。

    注意判空!
    情景:当要访问一个节点的左孩子或右孩子时,当前节点是非空的吗?

    其他知识

    当要修改原指针指向的内存地址时,可函数传参 为TreeNode** pNode。

    代码

    class Solution {
    public:
        TreeNode* Convert(TreeNode* pRootOfTree)
        {
            if(!pRootOfTree){
                return nullptr;
            }
            
            if(!pRootOfTree->left&&!pRootOfTree->right){
                return pRootOfTree;
            }
            
            //找到左子树转换成的链表的最右节点,连上根节点
            TreeNode* pLeftList=nullptr;
            pLeftList=Convert(pRootOfTree->left);
            if(pLeftList){//
                TreeNode* p=pLeftList;
                while(p->right){//
                    p=p->right;
                }
                pRootOfTree->left=p;
                p->right=pRootOfTree;
            }
            
            //找到右子树转换成的链表的最左节点,连上根结点
            TreeNode* pRightList=nullptr;
            pRightList=Convert(pRootOfTree->right);
            if(pRightList){
                TreeNode* p=pRightList;
                while(p->left){
                    p=p->left;
                }
                pRootOfTree->right=p;
                p->left=pRootOfTree;
            }
            
            //返回链表
            if(pLeftList){
                return pLeftList;
            }
            else{
                return pRootOfTree;
            }
        }
    };
    
  • 相关阅读:
    南阳1071
    hdu5110 dp
    hdu1199 线段树
    hdu5107 线段树
    hdu5106 数位dp
    hdu 5103 状态压缩dp
    C Strange Sorting
    hdu5102 枚举每条边的长度
    uva672
    uva473
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10576967.html
Copyright © 2011-2022 走看看