剑指offer 二叉搜索树和双向链表
剑指offer 牛客网 二叉搜索树和双向链表
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 9 18:58:36 2019 @author: Administrator
题目:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:
step1:采用递归中序遍历的方式,将值放在列表中
step2:遍历将其转换成双向链表
""" class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def Convert(self, pRootOfTree):
# write code here
if pRootOfTree: #判断边界条件,判空
res = [] #用于存放中序的节点
res = self.InOrder(res,pRootOfTree) #中序遍历
for index in range(len(res)-1):
if res[index]: #当节点不空进入
res[index].right = res[index+1] #前向串联
res[index+1].left = res[index] #反向串联
return res[0] #返回头结点
else: #若为空直接返回
return None
#递归的中序遍历
def InOrder(self,res,pRootOfTree):
if pRootOfTree:
self.InOrder(res,pRootOfTree.left) #遍历左子节点
res.append(pRootOfTree) #将根节点加入到列表中
self.InOrder(res,pRootOfTree.right) #遍历右子节点
return res
#打印双向的链表
def Print2list(self,head):
while head:
print(head.val)
head = head.right #从前往后遍历
#head = head.left #从后往前遍历
if __name__ == '__main__':
solution = Solution()
#1 2 3 4 5 6 7
node_left = TreeNode(1)
node_right = TreeNode(3)
root_left = TreeNode(2)
root_left.left = node_left
root_left.right = node_right node_left = TreeNode(5)
node_right = TreeNode(7)
root_right = TreeNode(6)
root = TreeNode(4)
root.left = root_left
root_right.left = node_left
root_right.right = node_right
root.right = root_right head = solution.Convert(root)
solution.Print2list(head)
剑指offer 二叉搜索树和双向链表的更多相关文章
- 剑指offer 二叉搜索树与双向链表
html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, & ...
- 剑指Offer——二叉搜索树与双向链表
题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 分析: 二叉搜索树,中序遍历就是排序的. 所以我们利用中序遍历,将前后两 ...
- 用js刷剑指offer(二叉搜索树与双向链表)
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 牛客网链接 js代码 /* function TreeNode(x) { ...
- [剑指Offer]36-二叉搜索树与双向链表
链接 https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&tPa ...
- 剑指Offer-26.二叉搜索树与双向链表(C++/Java)
题目: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 分析: 创建两个指针,分别指向要处理的当前元素和当前元素的前一个元素.利用中 ...
- 剑指Offer 二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 思路: 后续遍历数组的尾部为根节点,前面的部分 ...
- 剑指Offer——二叉搜索树的第k个结点
题目描述: 给定一颗二叉搜索树,请找出其中的第k大的结点. 例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4 分析: 二叉搜索树中序遍历就是从小到大.只 ...
- 剑指Offer——二叉搜索树的后序遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉查找树(Binary Search ...
- [剑指offer] 二叉搜索树的后序遍历序列 (由1个后续遍历的数组判断它是不是BST)
①题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ②思路 1.后续遍历的数组里,最后一个元素是根. 2 ...
随机推荐
- git 生成公钥 使用命令行无需输入用户名密码(windows)
之前设置过一次,后来就忘记了,今天改完密码之后发现命令行clone时验证身份失败,重新设置公钥,记录一下 1. 由于之前设置过公钥,所以不用输入用户名密码就可以执行git命令.现在密码变了,取消公钥, ...
- python(六)列表推导式、字典推导式、集合推导式
转载 https://www.cnblogs.com/tkqasn/p/5977653.html
- shiro-5基于url的权限管理
1.1 搭建环境 1.1.1 数据库 mysql5.1数据库中创建表:用户表.角色表.权限表(实质上是权限和资源的结合 ).用户角色表.角色权限表. 完成权限管理的数据模型创建. 1.1.2 开发环境 ...
- Java内存模型-final域的内存语义--没明白,预留以后继续理解
https://www.cnblogs.com/yuanfy008/p/9349275.html 来自 Java并发编程(1)-Java内存模型
- Android热更新技术——Tinker、nuwa、AndFix、Dexposed
一.热修复技术作用 线上app BUG紧急修复,不重新发版,不重新安装,在线远程修复问题 二.局限性与适用场景 补丁只能针对单一客户端版本,随着版本差异变大补丁体积也会增大: 补丁不能支持所有的修改, ...
- 微信小程序入门八头像上传
1. action-sheet 底部弹出可选菜单组件 2. wx.uploadFile 将本地资源上传到服务器 3. wx.chooseImage 从本地相册选择图片或使用相机拍照. 4. wx.pr ...
- vim设置行号
vim打开文件后在底行模式下输入:set nu可以在文件每行开头显示对应的行数: 若想vim打开文件默认显示行数,执行:vim /etc/vimrc,在打开的文件末尾添上:set nu,保存退出即可!
- linux 工具学习网站
推荐一个很不错的linux工具学习网站; 对于一个开发人员来说,我觉得掌握这些工具对于基于linux的应用开发来说事半功倍. http://linuxtools-rst.readthedocs.io/ ...
- Thymeleaf相关补充
⒈理解Thymeleaf Java模板引擎.能够处理HTML.XML.JavaScript.CSS甚至纯文本.类似JSP.Freemarker 自然模板.原型即页面 语法优雅易懂,OGNL.Sprin ...
- Maya API Test
import maya.OpenMaya as OpenMaya import maya.OpenMayaMPx as OpenMayaMPx sl = OpenMaya.MSelectionList ...