随笔分类 - 树
1
摘要:题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节
阅读全文
摘要:题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 1 class Solution: 2 # 返回二维列表[[1,2],[4,5]] 3 def Print(self, pRoot): 4 # write code here 5 if pRoot==None: 6 retu
阅读全文
摘要:题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 1 # -*- coding:utf-8 -*- 2 # class TreeNode: 3 # def __init__(self, x):
阅读全文
摘要:题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 1 class Solution: 2 def isSymmetrical(self, pRoot): 3 # write code here 4 def mirror(left
阅读全文
摘要:思路 如果该节点有右节点,那么它的下一个结点就是其右子树的最左节点 否则,如果他是父节点的左节点,则返回他的父节点,否则往上找,直到他的某个父节点a是a父节点的左节点,返回a的父节点。 1 class Solution: 2 def GetNext(self, pNode): 3 # write c
阅读全文
摘要:题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 思路:中序遍历 1 class Solution: 2 # 返回对应节点TreeNode 3 def KthNode(self, pRoot, k): 4 #
阅读全文
摘要:根据前序和中序重建二叉树: 1 class Solution: 2 # 返回构造的TreeNode根节点 3 def reConstructBinaryTree(self, pre, tin): 4 # write code here 5 if len(pre)==0: 6 return None
阅读全文
摘要:前序: 1 class Solution: 2 def preorderTraversal(self, root: TreeNode) -> List[int]: 3 res=[] 4 stack=[] 5 while root or stack: 6 if root: 7 stack.append
阅读全文
摘要:题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 1 class Solution: 2 def IsBalanced_Solution(self, pRoot): 3 # write code here 4 if pRoot == None: 5 return True 6 if abs(
阅读全文
摘要:题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路:用层次遍历,每次遍历到每层的最后一个节点,高度增加1 1 class Solution: 2 def TreeDepth(self, pRoot): 3 # wr
阅读全文
摘要:题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 思路 根节点将left连接到左子树的最右节点, 将right连接到右子树的最左节点 需要注意的是,我们要返回的是头节点,即最左边的节点,所以递归返回的是最左边的节点 右子树的
阅读全文
摘要:题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 思路: 层次遍历,每次记录当前路径,最后遍历到叶子,满足条件则insert,每次ins
阅读全文
摘要:题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 这道题特别傻的地方: 当输入sequence为空时返回false,但是递归规程中为空要返回true 1 # -*- coding:utf-8 -*-
阅读全文
摘要:题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 1 class Solution: 2 # 返回镜像树的根节点 3 def Mirror(self, root): 4 # write code here 5 if root==None: 6 return None 7 #处理根节点 8 ro
阅读全文
摘要:题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 1 class Solution: 2 def HasSubtree(self, pRoot1, pRoot2): 3 # write code here 4 if pRoot1==None or
阅读全文
摘要:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 示例 1: 输入: Tree 1 Tree 2 1 2
阅读全文
摘要:给定一个二叉树,原地将它展开为链表。 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 将root的右子树放到root的左子树的最右边作为右孩子 将root的左孩子变为自己的右孩子 (root.left=None) root = r
阅读全文
摘要:根据一棵树的前序遍历与中序遍历构造二叉树。 注意:你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7 1 class Solution
阅读全文
摘要:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果: [ [3], [9,20], [15,7]] 1 class Solution: 2 d
阅读全文
摘要:给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1: 示例 2: 低级做法,中序遍历,看看是否是有序的 给定一个二叉树,判断其是否是一个有效的
阅读全文
1