PreOrder, InOrder, PostOrder 题型总结

2024-09-04 14:38

本文主要是介绍PreOrder, InOrder, PostOrder 题型总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最基本的 Preorder, Inorder, Postorder Traverse

Binary Tree Preorder traverse (用stack模拟,先进去right ,再进去left)

Binary Tree Inorder traverse (用stack模拟,每次push整个左枝的所有node,再变换到右边);

Binary Tree Postorder traverse (用stack模拟,跟preorder一样,只是左右的顺序不一样,最后我们可以反过来记录,这样就把原来的问题转换成了一个我熟知的类似于preoder traverse的问题, 记住linkedlist需要addFirst,才能每次O(1)加到前面;)

Kth Smallest Element in a BST (就是inorder的翻版,记录一下count = k就可以了);

Inorder Successor in BST ( Time Complexity: O(logK). 先遍历找到P,同时记录一下左拐的点, 然后如果有右儿子,就扎到最右边的最左下的node,如果没有右儿子,就是找到这个点最后一个左拐的点)

Inorder Successor in BST II (如果有右边节点,那么往右走,右边的最左边node就是答案。如果没有右边的node,那么向上找到第一个左拐的node,就是答案) 

Validate Binary Search Tree (用stack来模拟inorder,然后记录pre node,如果pre node >= curnode return false; ) 这里注意的是stack 模拟为什么好?就是dfs是用的call stack,很容易stackoverflow,如果是用stack的话,那么就是利用heap来做 simulation,那样就很大,不会爆栈);

Construct Binary Tree from Preorder and Inorder Traversal (用preorder的root,去找inorder的root,确定leftsize大小,递归即可)

Construct Binary Tree from Inorder and Postorder Traversal (用postorder的最后一个root 去inorder里面找root,确定leftsize, 递归)

Construct Binary Search Tree from Preorder Traversal (用queue的思想,current, left, rig

这篇关于PreOrder, InOrder, PostOrder 题型总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136262

相关文章

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的