zoukankan      html  css  js  c++  java
  • 分解让复杂问题简单化-36二叉搜索树与双向链表

    题目描述

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

    思路1分析:步骤如下

    1.通过中序遍历二叉搜索树的结点保存到数组中,得到了有序的数组,数组里面存储了树结点;
    2.遍历一遍数组建立结点之间的联系;
     
    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
        }
    }
    */
    import java.util.ArrayList;
    public class Solution {
        public TreeNode Convert(TreeNode root) {
            if(root==null) return null;
            ArrayList<TreeNode>list=new ArrayList<>();
            Inorder(list,root);//之后list里面保存了搜索二叉树的顺序遍历的结点序列
            return Change(list);
        }
        public void Inorder(ArrayList<TreeNode>list,TreeNode root){
            if(root!=null){
                Inorder(list,root.left);
                list.add(root);
                Inorder(list,root.right);
            }
        }
        public TreeNode Change(ArrayList<TreeNode>list){
            TreeNode head=list.get(0);
            TreeNode p=head;
            for(int i=1;i<list.size();i++){
                TreeNode tmp=list.get(i);
                tmp.left=p;
                p.right=tmp;
                p=tmp;
            }
            return list.get(0);
        }
    }

    思路2分析(递归):

  • 相关阅读:
    CF1313A Fast Food Restaurant
    模板: zkw线段树
    从5个经典工作开始看语义SLAM
    LeetCode题号[200,299]刷题总结
    2020春招实习总结
    LeetCode题号[100,199]刷题总结
    LeetCode题号[1,99]刷题总结
    HashMap源码详解
    动态规划——楼层扔鸡蛋问题
    图论——迪杰斯特拉算法和最小生成树
  • 原文地址:https://www.cnblogs.com/xuechengmeigui/p/13037929.html
Copyright © 2011-2022 走看看