• 剑指offer(26):二叉搜索树与双向链表


    刷题平台:牛客网

    题目描述

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

    思路:将二叉排序树中序遍历即得到一个有序序列,题目的关键是如何转化为一个双向链表,即修改左右孩子指针,需要使用一个pre指针辅助进行修改。

    C++非递归实现:

    class Solution {
    public:
        TreeNode* Convert(TreeNode* pRootOfTree)
        {
            if(!pRootOfTree) return NULL;
            stack<TreeNode*> S;
            TreeNode *p = pRootOfTree;
            TreeNode *pre;
            //对中序遍历的第一个结点特殊处理
            TreeNode *first;
            bool isFirst = true;
            //非递归中序遍历
            while(p||!S.empty()){
                if(p){
                    S.push(p);
                    p = p->left;
                }else{
                    p = S.top();
                    S.pop();
                    if(isFirst){
                        first = p;
                        pre = first;
                        isFirst = false;
                    }else{
                        pre->right = p;
                        p->left = pre;
                        pre = p;
                    }
                    p = p->right;
                }
            }
            
            return first;
        }
    };

    java递归实现:

    public class Solution {
        public TreeNode pre = null;
        public TreeNode Convert(TreeNode pRootOfTree) {
            if(pRootOfTree == null)
                return null;
            InOrder(pRootOfTree);
            TreeNode p = pRootOfTree;
            while(p.left != null)
                p = p.left;
            return p;
        }
        public void InOrder(TreeNode pRootOfTree) {
            if(pRootOfTree != null){
    
                InOrder(pRootOfTree.left);
                pRootOfTree.left = pre;
                if(pre!=null) pre.right = pRootOfTree;
                pre = pRootOfTree;
    
                InOrder(pRootOfTree.right);
            }
        }
    }

  • 相关阅读:
    红蓝对抗
    SQLMAP用法大全
    Web安全工程师(进阶)课程表
    msf连接PostgreSQL数据库
    我的web安全工程师学习之路——规划篇
    web安全深度剖析pdf
    js面试题
    js克隆一个对象
    js面试必考:this
    前端面试:js数据类型
  • 原文地址:https://www.cnblogs.com/ttzz/p/13399733.html
Copyright © 2020-2023  润新知