zoukankan      html  css  js  c++  java
  • 二叉树与双向链表的转换

    题目描述

    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
     
    分析:二叉搜索树要转成有序的链表,可以想到的是利用中序遍历二叉树,每得到一个输出结点就修改其指针指向,从而构成有序链表。
     
    题解:
    /*
    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)
        {
            if(pRootOfTree == nullptr)    return nullptr;
            // 非递归算法,故用堆栈
            stack<TreeNode*> sck;
            TreeNode *pCur = pRootOfTree;
            TreeNode *pNode = nullptr;        // 存储前一个输出结点
            TreeNode *pHead = nullptr;        // 存储有序链表表头
            while(!sck.empty() || pCur != nullptr) {
                
                while(pCur != nullptr) {
                    sck.push(pCur);
                    pCur = pCur->left;
                }
                pCur = sck.top();
                // 处理输出结点
                if(pNode != nullptr) {
                    pNode->right = sck.top();
                    sck.top()->left = pNode;
                    pNode = sck.top();
                }
                if(pNode == nullptr) {
                    pNode = sck.top();
                    pHead = pNode;
                }
                pNode = sck.top();
                sck.pop();
                
                if(pCur->right) {
                    pCur = pCur->right;
                }
                else {
                    pCur = nullptr;
                }
            }
            return pHead;
        }
    };
    

      

  • 相关阅读:
    sql Test
    使用Team Foundation Server进行源代码管理
    幸运的秘密
    使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
    发布.net项目开发工具新版
    C#.Net项目生成器(ibatis)使用说明
    敏捷开发,Agile Development
    单元测试基础篇VS2008
    iBATIS.NET
    IBatis.Net学习笔记系列
  • 原文地址:https://www.cnblogs.com/xzxl/p/9611161.html
Copyright © 2011-2022 走看看