博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【重点】剑指offer——面试题27:二叉搜索树与双向链表
阅读量:2254 次
发布时间:2019-05-09

本文共 1176 字,大约阅读时间需要 3 分钟。

剑指offer——面试题27:二叉搜索树与双向链表

Solution1:

这是书上的代码,要理解好最近几道题,对指针的操作比较多。。。

class Solution {public:    TreeNode* Convert(TreeNode* pRootOfTree) {        TreeNode *pLastNodeInList = NULL;        ConvertNode(pRootOfTree, pLastNodeInList);        //pLastNodeInList指向双链表的尾结点        //返回头结点        TreeNode *pHeadOfList = pLastNodeInList;        while(pHeadOfList && pHeadOfList->left)            pHeadOfList = pHeadOfList->left;        return pHeadOfList;    }    void ConvertNode(TreeNode* pNode, TreeNode *&pLastNodeInList){ //第二个参数是指针的引用        if(!pNode)            return;        TreeNode *pCurrent = pNode;  //pNode目前指向的根结点,把pCurrent初始化为指向此根节点        if(pCurrent->left)   //如果根结点的左子树非空,则去处理左子树            ConvertNode(pCurrent->left, pLastNodeInList);        pCurrent->left = pLastNodeInList;//把左子树中值最大的结点的位置赋值给当前根结点的左指针        if(pLastNodeInList)            pLastNodeInList->right = pCurrent;//相应的根结点的位置赋给左子树中值最大结点的右指针                                              //经过这两步就把当前的根结点串到双向链表中了        pLastNodeInList = pCurrent;           //所以,这一步就更新链表中尾结点的位置,设为当前根结点的位置        if(pCurrent->right)           //右子树非空,处理右子树去。。            ConvertNode(pCurrent->right,pLastNodeInList);    }};

转载地址:http://nxhdb.baihongyu.com/

你可能感兴趣的文章
1055 The World's Richest-PAT甲级
查看>>
1033 To Fill or Not to Fill -PAT甲级
查看>>
1017 Queueing at Bank-PAT甲级
查看>>
1014 Waiting in Line -PAT甲级
查看>>
1015 Reversible Primes-PAT甲级(进制转换+素数筛选)
查看>>
进程同步
查看>>
经典进程的同步问题
查看>>
1016 Phone Bills-PAT甲级
查看>>
1019 General Palindromic Number
查看>>
1021 Deepest Root -PAT甲级
查看>>
1022 Digital Library-PAT甲级
查看>>
1023 Have Fun with Numbers-PAT甲级
查看>>
1024 Palindromic Number-PAT甲级
查看>>
1025 PAT Ranking-PAT甲级
查看>>
剑指Offer_包含min函数的栈
查看>>
剑指Offer_二叉搜索树的后序遍历序列
查看>>
剑指Offer_二叉树中和为某一值的路径
查看>>
SPFA单源最短路算法
查看>>
差分约束系统
查看>>
C++ Maps
查看>>