剑指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 二叉搜索树和双向链表的更多相关文章

  1. 剑指offer 二叉搜索树与双向链表

    html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, & ...

  2. 剑指Offer——二叉搜索树与双向链表

    题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 分析: 二叉搜索树,中序遍历就是排序的. 所以我们利用中序遍历,将前后两 ...

  3. 用js刷剑指offer(二叉搜索树与双向链表)

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 牛客网链接 js代码 /* function TreeNode(x) { ...

  4. [剑指Offer]36-二叉搜索树与双向链表

    链接 https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&tPa ...

  5. 剑指Offer-26.二叉搜索树与双向链表(C++/Java)

    题目: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 分析: 创建两个指针,分别指向要处理的当前元素和当前元素的前一个元素.利用中 ...

  6. 剑指Offer 二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   思路: 后续遍历数组的尾部为根节点,前面的部分 ...

  7. 剑指Offer——二叉搜索树的第k个结点

    题目描述: 给定一颗二叉搜索树,请找出其中的第k大的结点. 例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4 分析: 二叉搜索树中序遍历就是从小到大.只 ...

  8. 剑指Offer——二叉搜索树的后序遍历序列

    题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉查找树(Binary Search ...

  9. [剑指offer] 二叉搜索树的后序遍历序列 (由1个后续遍历的数组判断它是不是BST)

    ①题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ②思路 1.后续遍历的数组里,最后一个元素是根. 2 ...

随机推荐

  1. python中的Process

    from multiprocessing import Process import time import os # # def acb(n): # print(n) # # # if __name ...

  2. cmd关闭被占用的端口命令及教程详解

    //关闭端口占用命令eg:1. netstat -nao | findstr “8080” 查询8080端口2. taskkill /pid 3017 /F 关闭pid为3017的进程 //详解 ↓但 ...

  3. bind,unbind,one

    刚开始我们先看一下它的定义: .bind( eventType [, eventData], handler(eventObject)) .Bind()方法的主要功能是在向它绑定的对象上面提供一些事件 ...

  4. java包装类型的坑

    开发中有遇到Long类型比较是否相等,比如Long A和Long B判断是否相等,当时习惯性的直接A==B: 自测的话确实么有问题,但是测试那边测试就有问题,当时郁闷了一下然后换成了A.equals( ...

  5. rpmlib(PayloadIsLzma) <= 4.4.6-1 is needed【转载】

    以下为转载,但是有改动,原作者在一处写错了,将高写成了低,直接差之毫厘,谬之千里. 环境: centos el5 背景: 由于个人比较喜欢用软件的最新版本,在重新安装服务器上的 xdg-open(还有 ...

  6. mongodb 案例 ~ 经典故障案例

    一 简介:此文汇总遇到过和搜集过的故障案例 二 场景案例 1 问题描述: mongo集群在无任何业务情况下,mongos所在服务器cpu突然被打满,内核日志报错 mongos被hung住,非常奇怪的问 ...

  7. Qemu-KVM管理

    内容: 一.KVM基本配置 二.KVM网络的桥接 三.创建虚拟机 四.虚拟机的关闭和启动 关于KVM: 1).KVM是开源软件,全称是kernel-based virtual machine(基于内核 ...

  8. laravel 关闭 csrf 验证 TokenMismatchException

    csrf验证失败 注释掉kernel.php 的 csrf 行代码

  9. $resource详解

    $resource 首先添加$resource的引用 <script src="Scripts/angular.min.js"></script> < ...

  10. Shell-求平均

    Compute the Average Given integers, compute their average correct to three decimal places. Input For ...