二叉树
文章平均质量分 92
wenlyq
这个作者很懒,什么都没留下…
展开
-
二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 思路一:非递归 左子树一定比右子树小,因此去掉根后,数字分为left,right两部分,right部分的最后一个数字是右子树的根,他也比左子树所有值大,因此我们可以每次只看右子树是否符合条件即可。 即使到达了左子树,左子树也可以看出由左右子树组成的树...原创 2019-03-04 21:32:43 · 106 阅读 · 0 评论 -
maximum-depth-of-binary-tree
Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. 思路一:递归 /** * Definition for binary tree...原创 2019-05-19 17:11:34 · 139 阅读 · 0 评论 -
minimum-depth-of-binary-tree
题目描述 Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node. **思路一:**深度遍历(DFS)递归,先判断特殊情况根节点为空(0),...原创 2019-05-18 22:03:22 · 87 阅读 · 0 评论 -
二叉搜索树的第k个结点
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值...原创 2019-03-31 19:10:25 · 162 阅读 · 0 评论 -
??序列化二叉树
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 序列化:就是遍历输出,采用前序遍历 反序列化:根据序列,构造出二叉树 所谓序列化指的是遍历二叉树为字符串;依据前序遍历序列来序列化二叉树,因为前序遍历序列是从根结点开始的。当在遍历二叉树时碰到Null指针时,这些Null指针被序列化为一个特殊的字符“#”。 另外,结点之间的数值用逗号隔开。 所谓反序列化指的是依据字符串重新构造成二叉...原创 2019-03-31 18:16:12 · 364 阅读 · 0 评论 -
把二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 类似上一题 思路:利用层次遍历,但加入本层levelque和下一层nextlevel,res存放最终值 1.根节点加入levelque中 2.while leveque:针对每层创建一个nextlevel(存入左子树和右子树),curvalue存放当前层的值 3.然后将curvalue加入res中,nextlevel给le...原创 2019-03-31 15:53:27 · 92 阅读 · 0 评论 -
按之字形顺序打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 思路:利用层次遍历,但加入本层levelque和下一层nextlevel,加入righttoleft判断是否需要逆序,res存放最终值 1.根节点加入levelque中 2.while leveque:针对每层创建一个nextlevel(存入左...原创 2019-03-31 15:38:56 · 77 阅读 · 0 评论 -
对称的二叉树
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 思路: 定义一个比较函数比较左右子树 1.左子树为空,返回右子树是否为空 2.右子树为空,返回false 3.左右节点的值不同,返回false 4.递归比较 左子树的右子树和右子树的左子树 and 右子树的左子树和左子树的右子树 # -*- coding:utf-8 -*- #...原创 2019-03-29 21:36:46 · 74 阅读 · 0 评论 -
?*二叉树的下一个结点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路: 1.空,返回空 2.该节点存在右子节点,则指针指向该节点的右子节点,循环判断右子节点的左节点,直到左子节点为空 3.该节点不存在右子节点,循环条件(该节点的下一个节点不为空)创建一个根节点(指向该节点的下一个节点),若该节点为根节点的左子节点,返...原创 2019-03-29 21:15:14 · 186 阅读 · 0 评论 -
平衡二叉树
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路: 平衡二叉树:二叉树的左右子树距离不超过1 递归: 超过1,False 不超过1,左右子树都判断 # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None...原创 2019-03-22 19:17:18 · 74 阅读 · 0 评论 -
二叉树的深度
题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路: 递归:左树右树的深度最大值+1 # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left =...原创 2019-03-22 18:31:02 · 74 阅读 · 0 评论 -
从上往下打印二叉树
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路:层次遍历 利用队列从上至下,从左至右,依次存储每一个结点。 # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self...原创 2019-03-04 21:09:33 · 80 阅读 · 0 评论 -
二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 思路一:递归:若root为空,若root.left and root.right都为空,则返回; 其次进行左右节点交换; 然后左节点不空,则左节点Mirror;右节点不...原创 2019-03-03 17:09:30 · 87 阅读 · 0 评论 -
树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路:递归 1、首先设置标志位result = false,一旦匹配成功result就设为true,剩下的代码不会执行,如果匹配不成功,默认返回false。 2、递归思想,如果根节点相同则递归调用DoesTree1HaveTree2(),如果根节点不相同,则判断Tree1的左子树和Tree2是否相...原创 2019-03-03 16:15:55 · 75 阅读 · 0 评论 -
二叉搜索树与双向链表
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 思路:递归 1.将左子树构造成双链表,并返回链表头节点。 2.定位至左子树双链表最后一个节点。 3.如果左子树链表不为空的话,将当前pRootOfTree追加到左子树链表。 4.将右子树构造成双链表,并返回链表头节点。 5.如果右子树链表不为空的话,将该链表追加到pRoot...原创 2019-03-05 22:02:20 · 120 阅读 · 0 评论 -
二叉树中和为某一值的路径
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 思路:递归 # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.va...原创 2019-03-05 10:14:53 · 70 阅读 · 0 评论 -
重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路一:找到中序中根节点所在位置,分为左子树,右子树递归调用重建 # -*- coding:utf-8 -*- # class TreeNode: # ...原创 2019-02-25 19:57:51 · 122 阅读 · 0 评论 -
二叉树
一、二叉树层次遍历 从上往下打印二叉树 利用队列从上至下,从左至右,依次存储每一个结点。 # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class S...原创 2019-08-02 13:31:57 · 317 阅读 · 0 评论