剑指offer 面试36题
面试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题相关推荐
- 剑指offer 面试32题
面试32题: 题目:从上到下打印二叉树 题:不分行从上到下打印二叉树 解题代码: # -*- coding:utf-8 -*- # class TreeNode: # def __init__(sel ...
- 剑指offer 面试16题
面试16题: 题目:数值的整数次方 题:实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题 ...
- 剑指offer 面试3题
面试3题: 题:数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复 ...
- 剑指offer 面试31题
面试31题: 题目:栈的压入.弹出元素 题:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序 ...
- 剑指Offer面试算法题Java实现
面试题3 /*** 二维数组的查找* @author acer**/ public class _03FindInPartiallySortedMatrix {public static boolea ...
- 剑指offer 面试64题
题目:64题 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 解法一:利用Python特性 1 # -* ...
- 挑战一天(12h)刷完《剑指offer》67题
提前说明,挑战的人不是我. 大家周末好,我是爱上 B 站的小吴,最近一段时间我在网站 AlgoMooc 录制剑指 Offer 的视频,同时上传了一部分到 B 站,基于推荐算法,B 站疯狂的给我推送如何 ...
- 剑指offer第41题 和为s的两个数
剑指offer第41题 和为s的两个数 #include<iostream> using namespace std;bool sumk(int*list,int length,int*n ...
- 《剑指offer》刷题笔记(发散思维能力):求1+2+3+...+n
<剑指offer>刷题笔记(发散思维能力):求1+2+3+-+n 转载请注明作者和出处:http://blog.csdn.net/u011475210 代码地址:https://githu ...
最新文章
- js设置div透明度
- 简述数学建模的过程_数学建模研究过程指导:从高中数学体会数学概貌和数学建模...
- oracle教程之DML事务锁定的机制
- python学习音频-详解python播放音频的三种方法
- 联合检测和跟踪的MOT算法解析(含MOT17 No.1等多个榜前算法)
- sass 基础——回顾
- 不再单打独斗?中国移动联合多企业组建医疗数据公司
- 基于FPGA的红外遥控解码与PC串口通信
- Vue组件相关的知识
- 开课吧Java课堂:如何将用户定义的类存储于Collection中
- 醒醒吧!只努力了一个礼拜就想成功,你不觉得无耻吗?
- 工程计算——实战:追赶法扰动分析
- 【数据结构--二叉树】--附超详细图解
- Notion笔记软件简介
- 【目标检测·yolo系列】YOLOV3目标检测论文笔记(参考 同济子豪兄的解读)
- html 自动悬浮,HTML 悬浮float介绍
- None、Null与空字符‘‘什么区别
- 计算机上的游戏怎么不见了怎么办,电脑桌面上的游戏图标不见了怎么办
- weblogic11g清理缓存tmp
- 图书管理系统简单 过程
热门文章
- linux设备驱动之pci设备的驱动架构
- hadoop,hbase,hive安装全记录
- thrift RPC接口请求超时
- linux网络编程一:主机字节序与网络字节序的的判断
- python六十四: 迭代器协议
- Java Web学习总结(13)——JSP入门
- new Date(2019-05-10 08:00:00) 格式在IE内核或者低版本浏览器中显示NaN或者Invalid Date的问题...
- 教你打造一个Android组件化开发框架
- win10家庭版远程桌面连接出现身份验证错误
- ssm 使用中的一些问题