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

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

    思路:中序遍历二叉搜索树递归与非递归方式

        TreeNode* Convert(TreeNode* pRootOfTree)
        {
            //中序遍历
            //left指向前一个节点,right指向后一个节点
            //非递归
            if(pRootOfTree==NULL) return pRootOfTree;
            TreeNode*p,*pre,*proot;
            stack<TreeNode*>st;
            bool flag=false;
            p=pRootOfTree;
            do{
                while(p!=NULL)
                {
                    st.push(p);
                    p=p->left;
                }
                if(!st.empty())
                {
                    p=st.top();
                    if(pre!=NULL)
                    {
                        p->left=pre;
                        pre->right=p;
                    }
                    pre=p;
                    if(!flag)
                    {
                        proot=p;
                        flag=true;
                    }
                    st.pop();
                    //if(p->right!=NULL)
                    p=p->right;
                }
            }while(p!=NULL||!st.empty());
                return proot;
        }

    //递归

        TreeNode* Convert(TreeNode* pRootOfTree)
        {

           if(pRootOfTree==NULL)return NULL;
            TreeNode*pre=NULL,*p=pRootOfTree;
            ConvertHelper(pRootOfTree,pre);
            while(p->left!=NULL)
            {
                p=p->left;
            }
            return p;
        }
        void ConvertHelper(TreeNode* root,TreeNode*&pre)
        {
            if(root==NULL)return;
            ConvertHelper(root->left,pre);
            root->left=pre;
            if(pre)pre->right=root;
            pre=root;
            ConvertHelper(root->right,pre);
        }

  • 相关阅读:
    北风设计模式课程---11、策略模式
    北风设计模式课程---9、原型模式的作用和意义
    linux下lamp.sh一键配置lamp环境流程
    linux日常---1、linux下安装、查看、卸载包常用命令
    常见协议端口号,功能
    尚学linux课程---12、vim操作命令2
    搞笑视频分析---3、爱做饭的芋头:佛跳墙
    黑马day11 脏读数据&amp;解
    hdu 1150 Machine Schedule(最小顶点覆盖)
    Ubuntu在构建Robotframework+Selenium周围环境
  • 原文地址:https://www.cnblogs.com/trouble-easy/p/12969675.html
Copyright © 2011-2022 走看看