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

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

    【思路】注意此题目是将一个二叉搜索树转换成排序的双向链表,如果没有其他要求,我们可以直接对这个二叉树进行中序遍历,就可以得到已经排序好的节点,然后组合成一个双向链表,但题目不允许转换成新的节点!

    尽管如此,仍然可以使用中序遍历的思路,这时我们需要使用一个指针保存前驱节点pre,首先将pre指向当前节点的left,若pre不为空,则修改pre的right指向当前节点,接着让前驱节点向后移动,也就是指向当前节点cur。

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        void process(TreeNode* cur, TreeNode*& pre){
            if(cur == nullptr) return;
            process(cur->left, pre);
    
            cur->left = pre;
            if(pre) pre->right = cur;  
            // 如果前驱节点不为空,则将前驱节点的右节点指向当前节点
            pre = cur;
    
            process(cur->right, pre);
        }
    
        TreeNode* Convert(TreeNode* pRootOfTree)
        {
            if(pRootOfTree == nullptr) return nullptr;
            TreeNode* pre = nullptr;  // 声明指针要进行初始化
    
            process(pRootOfTree, pre);
    
            TreeNode* res = pRootOfTree;
            while(res->left){
                res = res->left;
            }
            return res;
        }
    };
  • 相关阅读:
    让unidac支持加密的sqlite
    hook api 保护进程
    Delphi实现网页采集
    UNIDAC
    Delphi的视频捕获组件
    删除程序自身
    一种简单的自校验的注册码生成方案以及暗桩方法
    SQL server表字段信息说明
    淘宝API开发(一)简单介绍淘宝API功能接口作用
    淘宝API开发(二)淘宝API接口功能测试
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11346306.html
Copyright © 2011-2022 走看看