剑指offer-重构二叉树-树-python】的更多相关文章

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}, 则重建二叉树并输出它的后序遍历序列. (测试用例中,"树"的输出形式类似于树的层次遍历,没有节点的用#来代替) 先序遍历:先遍历根节点,再遍历左子树,再遍历右子树,对子树采用相对规则遍历. 后序遍历:先遍历左子树,然后遍历右子树,最后遍历根节点,对子树采用相…
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的.   # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def isSymmetrical(self, pRoot): # write code here i…
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回.   思路:先找出前序遍历的第一个为root.然后查找该值在中序遍历中的位置设为index  使用递归:前序遍历中左子树长度为除了根节点到(1:index+1) 同时中序遍历左子树长度为(:index)                   前序遍历中右子…
[剑指Offer]二叉树的镜像 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 Ways 反转二叉树的左右节点,其实直接反转就好了.注意哈,从根节点…
[剑指Offer]二叉树中和为某一值的路径 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 解题方法 其实这个就是一个dfs的问题,遇到的比较多了.第一遍没通过是因为忘了把root.val给放进去了!这个可不能忘啊!! 参考Bin…
[剑指Offer]二叉树的下一个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解题方法 分析二叉树的下一个节点,一共有以下情况: 1.二叉树为空,则返回空: 2.节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指向左…
本题来自<剑指offer>二叉树的镜像 题目: 操作给定的二叉树,将其变换为源二叉树的镜像. 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 思路:   关于树,如果思路不够明确,可以画出图标辅助理解题目. 画出几步就会得出通用的思路,镜像发现如果通过交换左右子节点,左子树又是树,右子树又是树.可以采用递归的思路. 递归需要找到结束条件,如果根节点是是空或者当为子节点时候便结束本次递归. C…
剑指Offer:二叉树中和为某一值的路径[34] 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 题目分析 Java题解 package tree; import java.util.ArrayList; import java.util.Scanner; public class FindPath { private static ArrayList<ArrayList<Integer&g…
剑指 Offer 34. 二叉树中和为某一值的路径 Offer_34 题目详情 题解分析 本题是二叉树相关的题目,但是又和路径记录相关. 在记录路径时,可以使用一个栈来存储一条符合的路径,在回溯时将进栈的元素出栈,以此可以找到所有的Path. package com.walegarrett.offer; import java.util.*; /** * @Author WaleGarrett * @Date 2021/2/1 18:09 */ /** * 题目:输入一棵二叉树和一个整数,打印出…
剑指 Offer 34. 二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下二叉树,以及目标和 target = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1 返回: [ [5,4,11,2], [5,8,4,5] ] 提示: 节点总数 <= 10000 做题思路: 首先明白这道题要求的是对树进行一次遍历,然后在遍历的时候记录从根节…
题目 剑指 Offer 27. 二叉树的镜像 思路1(递归) 我们可以使用深度优先搜索,先递归到链表的末尾,然后从末尾开始两两交换.就相当于后续遍历而已 记得要先保存下来node.right节点,因为我们在递归完左边才递归右边,而递归完左边的时候,直接把node.right的指向修改了,如果事先不保存node.right节点的话,在递归右边传入的节点是错误的节点,因此得不到正确的答案 代码 class Solution { public TreeNode mirrorTree(TreeNode…
剑指Offer:二叉树打印成多行[23] 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 Java题解 package tree; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; public class PrintByLevel { public static void main(String[] args) { TreeNode t1 = n…
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26141815 题目描写叙述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的全部路径.路径定义为从树的根结点開始往下一直到叶结点所经过的结点形成一条路径. 输入: 每一个測试案例包含n+1行: 第一行为2个整数n,k(1<=n<=10000),n表示结点的个数,k表示要求的路径和,结点编号从1到n. 接下来有n行.这n行中每行为3个整数vi,leftnode,right…
本文参考自<剑指offer>一书,代码采用Java语言.  更多:<剑指Offer>Java实现合集 题目 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针. 思路 首先自己在草稿纸上画图,进行分析(不再展开).可以发现下一个结点的规律为: 1.若当前结点有右子树时,其下一个结点为右子树中最左子结点: 2.若当前结点无右子树时, (1)若当前结点为其父结点的左子结点时,其下一个结点为其父结…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 思路 画图可以很清晰地得到思路:先前序遍历,对每个结点交换左右子结点. 测试算例 1.功能测试(普通二叉树:左斜树:右斜树:一个结点) 2.特殊测试(根结点为null:) Java代码 //题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像. public class MirrorOfBinaryTree { pu…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 思路 1.假设找到了其中一条路径,达到叶结点后,由于没有指向父结点的指针,所以必须提前创建一个链表存储前面经过的结点. 2.由于是从根结点出发,所以要想到使用前序遍历 3.利用链表存储结点,在该结点完成左右子树的路径搜索后(即递归函数结束,返回…
  本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的/结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 思路 简洁理解: 树的深度=max(左子树深度,右子树深度)+1,采用递归实现. 测试算例 1.功能测试(左斜树.右斜树.普通树) 2.边界值测试(一个结点) 3.特殊测试(null) Java代码 //题目:输入一棵二叉树的根结点,求该树…
该题目来源于牛客网<剑指offer>专题. 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. Go语言实现: /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func maxDepth(root *TreeNode) int { if r…
该题目来源于牛客网<剑指offer>专题. 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大的数组靠前) Go语言实现: var arrAll [][]int var arrPath []int func findPath(root *TreeNode, target int) [][]int { if root == nil { return arrA…
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:…
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:…
剑指offer简单题,但是能一下写对也需要小心考虑细节. 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 /   / 5 7 9 11 镜像二叉树 8 / 10 6 /   / 11 9 7 5 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), righ…
该题目来源于牛客网<剑指offer>专题. 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回. 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. Go语言实现: type TreeNode struct { Val int Left *TreeNode Right *TreeNode Parent *TreeNode } ​ func getNext(node *TreeNode) *TreeNode { if node == nil { return ni…
该题目来源于牛客网<剑指offer>专题. 操作给定的二叉树,将其变换为源二叉树的镜像. 示例: 输入: 4 / 2 7 / \ / 1 3 6 9 输出: 4 / 7 2 / \ / 9 6 3 1 Go语言实现: /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func invertTree(root *…
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 日期 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题方法 找到左右子树最大深度+1即可,递归的终止条件是空节点的深度是0. Python代码: # -*- coding:…
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大的数组靠前) # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # 返回二维列…
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大的数组靠前) 题目地址 https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca?tpId=13&tqId=11177&rp=2&ru=/ta/coding-interviews&qru=/ta/cod…
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 题目地址 https://www.nowcoder.com/practice/435fb86331474282a3499955f0a41e8b?tpId=13&tqId=11191&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 思路 思路1: 递…
本来这只是一个普通的算法题,但是当初自己OJ上提交时,总是提交失败,而我自己认定程序逻辑没有任何问题.然后开始就在本机上调试,结果发现这是由于Python的对象机制而引发的.所以先把问题算法题贴出来,然后通过该问题,详述Python的对象机制! 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 这道题本身不难,书上.网上也有很多关于该问题的解释,这里我就直接贴上我的Python代码(该代码有一…
一.题目: 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大的数组靠前) 二.思路: 1.思路分析:采用深度搜索的方法,每次传进去剩余的值,如果到了叶节点(左右子树均为空)剩余的值和叶节点的值一样则说明找到了一条路径,否则继续搜索左右子树,注意的是,每次搜索完一个节点要回退到上一节点. 2.注意事项:python数组是引用地址的,所以不能将临时数组tmp直…