热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【剑指offer】36.二叉搜索树与双向链表

Python3本题利用中序遍历深度优先搜索解决。参考:https:leetcode.cnproblemser-cha-sou-suo-shu-yu-shuang-x
Python3

本题利用中序遍历+深度优先搜索解决。
参考:https://leetcode.cn/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/solution/mian-shi-ti-36-er-cha-sou-suo-shu-yu-shuang-xian-5/

根据上述思路,代码如下:

# Definition for a binary tree node.
# class Node:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = rightclass Solution:# 深度优先搜索,中序遍历二叉搜索树def dfs(self, cur):if not cur: # 当节点cur为空,代表越过叶子节点,直接返回return Noneself.dfs(cur.left) # 递归左子树# 构建链表if not self.pre: # 如果pre为空,说明正在访问链表的头节点,令head为curself.head = curelse: # 否则,建立双向引用self.pre.right = curcur.left = self.preself.pre = cur # 更新preself.dfs(cur.right) # 递归右子树# 主函数def treeToDoublyList(self, root: 'Node') -> 'Node':# 特例:如果root为空,说明二叉搜索树为空,则返回的链表亦为空if not root:return None# 定义空节点preself.pre = Noneself.dfs(root)# 链表的首尾相连self.head.left = self.preself.pre.right = self.headreturn self.head

时间复杂度分析

假设二叉搜索树有NNN个节点,中序遍历需要遍历所有节点,因此时间复杂度为O(N)O(N)O(N)


推荐阅读
author-avatar
baaiiii
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有