面试36题:

题:二叉搜索树与双向链表

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

解题思路一:由于输入的一个二叉搜索树,其左子树大于右子树的值,这位后面的排序做了准备,因为只需要中序遍历即可,将所有的节点保存到一个列表,。对这个list[:-1]进行遍历,每个节点的right设为下一个节点,下一个节点的left设为上一个节点。

借助了一个O(n)的辅助空间

解题代码:(注意:attr列表中的元素是链表节点)

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:def Convert(self, pRootOfTree):# write code hereif not pRootOfTree:returnself.attr=[]self.inOrder(pRootOfTree)for i,v in enumerate(self.attr[:-1]):self.attr[i].right=self.attr[i+1]self.attr[i+1].left=vreturn self.attr[0]def inOrder(self,root):if not root:returnself.inOrder(root.left)self.attr.append(root)self.inOrder(root.right)

解题思路二:递归,将特定节点的左指针指向其左子树中的最后子节点,将其右指针指向其右子树中的最左子节点,依次递归,调整好全部节点的指针指向。

解题代码:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:def Convert(self, pRootOfTree):# write code hereif not pRootOfTree:returnroot=pHead=pRootOfTreewhile pHead.left:pHead=pHead.leftself.Core(root)return pHeaddef Core(self,root):if not root.left and not root.right:returnif root.left:preRoot=root.leftself.Core(root.left)while preRoot.right:preRoot=preRoot.rightpreRoot.right=rootroot.left=preRootif root.right:nextRoot=root.rightself.Core(root.right)while nextRoot.left:nextRoot=nextRoot.leftnextRoot.left=rootroot.right=nextRoot

转载于:https://www.cnblogs.com/yanmk/p/9220765.html

剑指offer 面试36题相关推荐

  1. 剑指offer 面试32题

    面试32题: 题目:从上到下打印二叉树 题:不分行从上到下打印二叉树 解题代码: # -*- coding:utf-8 -*- # class TreeNode: # def __init__(sel ...

  2. 剑指offer 面试16题

    面试16题: 题目:数值的整数次方 题:实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题 ...

  3. 剑指offer 面试3题

    面试3题: 题:数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复 ...

  4. 剑指offer 面试31题

    面试31题: 题目:栈的压入.弹出元素 题:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序 ...

  5. 剑指Offer面试算法题Java实现

    面试题3 /*** 二维数组的查找* @author acer**/ public class _03FindInPartiallySortedMatrix {public static boolea ...

  6. 剑指offer 面试64题

    题目:64题 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 解法一:利用Python特性 1 # -* ...

  7. 挑战一天(12h)刷完《剑指offer》67题

    提前说明,挑战的人不是我. 大家周末好,我是爱上 B 站的小吴,最近一段时间我在网站 AlgoMooc 录制剑指 Offer 的视频,同时上传了一部分到 B 站,基于推荐算法,B 站疯狂的给我推送如何 ...

  8. 剑指offer第41题 和为s的两个数

    剑指offer第41题 和为s的两个数 #include<iostream> using namespace std;bool sumk(int*list,int length,int*n ...

  9. 《剑指offer》刷题笔记(发散思维能力):求1+2+3+...+n

    <剑指offer>刷题笔记(发散思维能力):求1+2+3+-+n 转载请注明作者和出处:http://blog.csdn.net/u011475210 代码地址:https://githu ...

最新文章

  1. js设置div透明度
  2. 简述数学建模的过程_数学建模研究过程指导:从高中数学体会数学概貌和数学建模...
  3. oracle教程之DML事务锁定的机制
  4. python学习音频-详解python播放音频的三种方法
  5. 联合检测和跟踪的MOT算法解析(含MOT17 No.1等多个榜前算法)
  6. sass 基础——回顾
  7. 不再单打独斗?中国移动联合多企业组建医疗数据公司
  8. 基于FPGA的红外遥控解码与PC串口通信
  9. Vue组件相关的知识
  10. 开课吧Java课堂:如何将用户定义的类存储于Collection中
  11. 醒醒吧!只努力了一个礼拜就想成功,你不觉得无耻吗?
  12. 工程计算——实战:追赶法扰动分析
  13. 【数据结构--二叉树】--附超详细图解
  14. Notion笔记软件简介
  15. 【目标检测·yolo系列】YOLOV3目标检测论文笔记(参考 同济子豪兄的解读)
  16. html 自动悬浮,HTML 悬浮float介绍
  17. None、Null与空字符‘‘什么区别
  18. 计算机上的游戏怎么不见了怎么办,电脑桌面上的游戏图标不见了怎么办
  19. weblogic11g清理缓存tmp
  20. 图书管理系统简单 过程

热门文章

  1. linux设备驱动之pci设备的驱动架构
  2. hadoop,hbase,hive安装全记录
  3. thrift RPC接口请求超时
  4. linux网络编程一:主机字节序与网络字节序的的判断
  5. python六十四: 迭代器协议
  6. Java Web学习总结(13)——JSP入门
  7. new Date(2019-05-10 08:00:00) 格式在IE内核或者低版本浏览器中显示NaN或者Invalid Date的问题...
  8. 教你打造一个Android组件化开发框架
  9. win10家庭版远程桌面连接出现身份验证错误
  10. ssm 使用中的一些问题