zoukankan      html  css  js  c++  java
  • 剑指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);
            }
        }
    }

  • 相关阅读:
    华为上机练习题--求两个数组的总和
    C++设计模式之状态模式(四)
    深入理解java嵌套类和内部类
    c++实现精确计时
    Linux-中断和中断处理
    使用C#对MongoDB中的数据进行查询,改动等操作
    淘特房产CMS系统 7.5
    sass03 变量、样式导入
    sass02
    sass01
  • 原文地址:https://www.cnblogs.com/ttzz/p/13399733.html
Copyright © 2011-2022 走看看