zoukankan      html  css  js  c++  java
  • 剑指offer 27:二叉搜索树与双向链表

    题目描述

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

    解题思路

    采用中序遍历遍历二叉树,利用二叉排序树的特性,顺次连接节点,形成双向链表。

    C++代码实现

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        TreeNode* Convert(TreeNode* pRootOfTree)
        {
            //指向根节点左子树的最后一个节点
            TreeNode *pLastNodeInList=NULL;
            ConvertNode(pRootOfTree ,&pLastNodeInList);
            TreeNode * pHeadFirst=pLastNodeInList;
            //记录根节点的值
            while(pHeadFirst!=NULL && pHeadFirst->left!=NULL){
                pHeadFirst=pHeadFirst->left;
            }
            return pHeadFirst;
        }
        void ConvertNode(TreeNode* pRootOfTree ,TreeNode** pLastNodeInlist){
            if (pRootOfTree ==NULL){
                return ;
            }
            TreeNode * cur=pRootOfTree;
            if (cur->left!=NULL){
                ConvertNode(cur->left,pLastNodeInlist);
            }
            cur->left=*pLastNodeInlist;
            if(*pLastNodeInlist!=NULL){
                (*pLastNodeInlist)->right=cur;
            }
            (*pLastNodeInlist)=cur;
            if (cur->right!=NULL){
                ConvertNode(cur->right,pLastNodeInlist);
            }
        }
    };
  • 相关阅读:
    动手动脑——登录界面
    异常处理动手动脑问题
    继承与多态
    课程作业04——动手动脑(字符串String)
    创建过的对象的个数
    类和对象动手动脑问题
    第二周进度条
    构建之法阅读笔记01
    新课程界面
    软件工程概论课后作业01
  • 原文地址:https://www.cnblogs.com/fancy-li/p/11724935.html
Copyright © 2011-2022 走看看