博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指Offer-26-二叉搜索树与双向链表
阅读量:3726 次
发布时间:2019-05-22

本文共 3248 字,大约阅读时间需要 10 分钟。

题目描述

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

/**public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/import java.util.Stack;public class Solution {    public TreeNode Convert(TreeNode pRootOfTree) {        if(pRootOfTree==null){            return null;        }        Stack
stack = new Stack
(); collection(stack,pRootOfTree); TreeNode first,second; first = stack.pop(); first.right = null; while(!stack.empty()){ second = stack.pop(); first.left = second; second.right = first; first = second; } first.left=null; return first; } public void collection(Stack
stack,TreeNode pRootOfTree){ if(pRootOfTree.left!=null){ collection(stack,pRootOfTree.left); } stack.push(pRootOfTree); if(pRootOfTree.right!=null){ collection(stack,pRootOfTree.right); } }}

下面代码时间复杂度比较高,过不去

import java.util.Stack;import java.util.Queue;import java.util.LinkedList;public class Solution {    public TreeNode Convert(TreeNode pRootOfTree) {        if(pRootOfTree==null){            return null;        }        Stack
stack = new Stack
(); Queue
queue = new LinkedList
(); while(pRootOfTree!=null||stack.isEmpty()){ while(pRootOfTree!=null){ stack.push(pRootOfTree); pRootOfTree = pRootOfTree.left; } //TreeNode temp; if(!stack.isEmpty()){ pRootOfTree = stack.pop(); queue.add(pRootOfTree); pRootOfTree = pRootOfTree.right; } } TreeNode first,second,head; first = queue.poll(); head = first; while(!queue.isEmpty()){ second = queue.poll(); first.left = second; second.right = first; first = second; } head.left=null; return head; }}

改了一下,下面可以通过了

import java.util.Stack;public class Solution {    public TreeNode Convert(TreeNode pRootOfTree) {        if(pRootOfTree==null){            return null;        }        else if(pRootOfTree.left==null&&pRootOfTree.right==null){            return pRootOfTree;        }        Stack
stack = new Stack
(); TreeNode first=null,second=null,head=null; while(pRootOfTree!=null||!stack.isEmpty()){ while(pRootOfTree!=null){ stack.push(pRootOfTree); pRootOfTree = pRootOfTree.left; } //TreeNode temp; if(!stack.isEmpty()){ pRootOfTree = stack.pop(); if(head==null){ first = pRootOfTree; head = first; } else{ second = pRootOfTree; first.right = second; second.left = first; first = second; } pRootOfTree = pRootOfTree.right; } } second.right=null; return head; }}

 

转载地址:http://dyonn.baihongyu.com/

你可能感兴趣的文章
npm(Node Package Manager)安装、及 操作 教程
查看>>
SpringBoot框架完整‖怎么写一个基础项目
查看>>
为什么有spring框架?| spring 框架产生的背景
查看>>
spring框架的 IOC翻转控制 | 解决程序之间的依赖关系,降低耦合
查看>>
数据库设计报告——用教材管理系统来举例
查看>>
ubuntu 20.04安装提示无法安装文件
查看>>
ubuntu安装软件显示无法安全地用该源进行更新,所以默认禁用该源(已解决)
查看>>
虚拟机Ubuntu中如何打出中文/切换输入法
查看>>
VMware Worktation[Linux]Ubuntu 20.04更换源
查看>>
Ubuntu中安装sublime出现问题E: 无法定位软件包 sublime-text(已解决)
查看>>
Linux下Ubuntu 20.04创建sublime text 3的快捷方式
查看>>
K210寻找色块
查看>>
K210单色块识别并框选
查看>>
K210实现多色块检测功能
查看>>
Ubuntu20.04 无法显示共享文件夹
查看>>
Ubuntu20.04 Python开发环境配置安装(未完成)
查看>>
print(torch.cuda.is_available())返回false的解决方法(未解决)
查看>>
Ubuntu20.04安装开发环境应该提前注意的事情
查看>>
ubuntu20.04不是所有者所以不能更改权限
查看>>
K210官网云端目标检测模型训练-使用vott进行图像标注一
查看>>