zoukankan      html  css  js  c++  java
  • 剑指offer系列——26.二叉搜索树与双向链表**

    Q:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
    T:利用一个栈实现二叉树的中序遍历,题中说这是一颗二叉树,那么二叉树的中序遍历是一个有顺序的,  那么这个时候只需要在中序遍历的时候当找到一个遍历节点的时候先将这个节点保存起来,然后遍历下一个节点的时候将之前保存的节点的right域指向下一个结点,下一个结点的left域指向上一个结点。这样一来就形成了一个排序的双向链表。然后将之前指向保存的指针指向当前这个结点。

    //递归版
    private:
        TreeNode* pLast = nullptr;
    public:
        TreeNode* Convert(TreeNode* pRootOfTree)
        {
            if(!pRootOfTree)
                return nullptr;
            TreeNode* head = Convert(pRootOfTree->left);
            if(!head)
                head = pRootOfTree;
            pRootOfTree->left = pLast;
            if(pLast)
               pLast->right = pRootOfTree;
            pLast = pRootOfTree;
            Convert(pRootOfTree->right);
            return head;
        }
    
    //非递归版
    public:
        TreeNode* Convert(TreeNode* pRootOfTree)
        {
            TreeNode *head = NULL, *pre = NULL;//head 输出,pre记录上一次出栈值
            stack<TreeNode*> s;
            while (pRootOfTree || !s.empty())
            {
                while (pRootOfTree)
                {
                    s.push(pRootOfTree);
                    pRootOfTree = pRootOfTree->left;
                }
                if (!s.empty())
                {
                    pRootOfTree = s.top();
                    s.pop();
                    if (pre != NULL)
                    {
                        pre->right = pRootOfTree;
                        pRootOfTree->left = pre;
                    }
                    else//pre为空,表示s第一次出栈,第一次出栈值为最左值,即输出值
                        {
                        head = pRootOfTree;
                    }
                    pre = pRootOfTree;
                    pRootOfTree = pRootOfTree->right;
                }
            }
            return head;
        }
    
  • 相关阅读:
    Ecshop后台管理增加成本价和毛利润统计功能
    如何在Ecshop首页调用积分商城里的商品
    Ecshop调用促销商品
    Python 精选内置函数
    Python爬虫原理
    android中解析后台返回的json字符串
    JSONObject与JSONArray的使用
    python的字符串截取
    centos6系统下网卡bond模式介绍
    fio工具中的iodepth参数与numjobs参数-对测试结果的影响
  • 原文地址:https://www.cnblogs.com/xym4869/p/12294217.html
Copyright © 2011-2022 走看看