二叉树/DFS总结】的更多相关文章

UVA.839 Not so Mobile ( 二叉树 DFS) 题意分析 给出一份天平,判断天平是否平衡. 一开始使用的是保存每个节点,节点存储着两边的质量和距离,但是一直是Runtime error.也不知道到底是哪里出了问题,后来发现直接判断当前是否平衡,若下面还有节点,接着递归调用dfs判断,这样一来省去了存储节点所需要的空间和时间,效率大大提升. 代码总览 #include <iostream> #include <cstdio> #include <cstring…
UVA.548 Tree(二叉树 DFS) 题意分析 给出一棵树的中序遍历和后序遍历,从所有叶子节点中找到一个使得其到根节点的权值最小.若有多个,输出叶子节点本身权值小的那个节点. 先递归建树,然后DFS求解. 代码总览 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <string> #include <sstre…
二叉树 - DFS与BFS ​ 深度优先遍历 (DFS Depth First Search) 就是一个节点不到头(叶子节点为空) 不回头 ​ 广度有点遍历(BFS Breadth First Search) 就是一层一层输出 , 输出到最下层的叶子节点, 为空的时候结束 ​ 其中深度遍历就是我们所说的 先序遍历 中序遍历 后序遍历 , 先中后指的是根节点输出的时机,先就是根左右 数据结构如下, 全文都是 public class TreeNode { int val; TreeNode lef…
找到所有根到叶子的路径 深度优先搜索(DFS), 即二叉树的先序遍历. /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<string> v…
问题 A: 选课 时间限制: 1 Sec  内存限制: 128 MB 题目描述 大 学里实行学分.每门课程都有一定的学分,学生只要选修了这门课并考核通过就能获得相应的学分.学生最后的学分是他选修的各门课的学分的总和. 每个学生都要选择规定数量的课程.其中有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其它的一些课程的基础上才能选修.例如,<数据结 构>必须在选修了<高级语言程序设计>之后才能选修.我们称<高级语言程序设计>是<数据结构>的先修课.…
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum. Note: A leaf is a node with no children. Example: Given the below binary tree and sum = 22, 5 / \ 4 8…
Tree UVA - 548 题意就是多次读入两个序列,第一个是中序遍历的,第二个是后序遍历的.还原二叉树,然后从根节点走到叶子节点,找路径权值和最小的,如果有相同权值的就找叶子节点权值最小的. 最后输出来叶子节点. 一开始写的时候是用gets读入的,报CE, 要用fgets写,关于fgets(),传送门: fgets函数及其用法,C语言fgets函数详解 一开始用bfs过的,后来发现,好多人都是dfs过的,又写了一下dfs... 代码: //二叉树的中序和后序遍历还原树并输出最短路径的叶子节点…
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印.   思路: 用一个队列来辅助,先压入根节点,设置一个指针记录队列头位置,判断队头指针有没有孩子,有压入左右孩子,,,操作完一次,队头出队.   /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Sol…
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree [1,2,2,3,4,4,3] is symmetric: 1 / \ 2 2 / \ / \ 3 4 4 3 But the following [1,2,2,null,3,null,3] is not: 1 / \ 2 2 \ \ 3 3 Not…
二叉搜索树(Binary Search Tree,又名排序二叉树,二叉查找树,通常简写为BST)定义如下: 空树或是具有下列性质的二叉树: ()若左子树不空,则左子树上所有节点值均小于或等于它的根节点值: ()若右子树不空,则右子树上所有节点值均大于或等于它的根节点值: ()左.右子树也为二叉搜索树: BST 的特性 按照中序遍历(inorder traversal)打印各节点,会得到由小到大的顺序. 在BST中搜索某值的平均情况下复杂度为O(logN)O(logN),最坏情况下复杂度为O(N)…
Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have the same value. 两颗二叉树完全相同,也就是某个节点的左右孩子,和另外一棵树的的对应节点的左右孩子相等.和镜像对称树那题类似. 代码: class S…
翻转二叉树 翻转一棵二叉树.左右子树交换. Example 样例 1: 输入: {1,3,#} 输出: {1,#,3} 解释: 1 1 / => \ 3 3 样例 2: 输入: {1,2,3,#,#,4} 输出: {1,3,2,#,4} 解释: 1 1 / \ / \ 2 3 => 3 2 / \ 4 4 Challenge 递归固然可行,能否写个非递归的? 代码: """ Definition of TreeNode: class TreeNode: def _…
题意: 给定一个天平长度 输入格式为 wl dl wr dr 分别代表天平左边长度,左边重量, 右边长度, 右边重量. 如果重量为0, 说明下面还有一个天平, 递归给出. 样例输入:10 2 0 40 3 0 11 1 1 12 4 4 21 6 3 2 如果天平是左右重量相等的 输出YES 否则输出NO. 分析: 既然以递归的定义输入, 那么我们程序最好写成递归建树,如果有重量是0, 那么就递归建左子树或者右子树 , 如果是叶子节点的父节点(这个天平下面没天平), 那么就判断左右是否相等返回即…
Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1. 判断一棵树是否为平衡二叉树. 思路:典型的递归,从第一个根节点开始,看…
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. 代码: /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * Tr…
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum. For example:Given the below binary tree and sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1 return true…
[js]Leetcode每日一题-二叉树的堂兄弟节点 [题目描述] 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点. 我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y . 只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true .否则,返回 false. 示例1: 输入:root = [1,2,3,4], x = 4, y = 3 输出…
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. 求二叉树的高度,即从根节点到叶节点上所有节点的数量. 解题思路: 这题是难度系数1,频率1的题目……用到的知识点是二叉树D…
问题描述 可怜的 Bibi 刚刚回到家,就发现自己的手机丢了,现在他决定回头去搜索自己的手机.现在我们假设 Bibi 的家位于一棵二叉树的根部.在 Bibi 的心中,每个节点都有一个权值 x,代表他心中预感向这个节点走可能找回自己手机的程度(虽然他的预感根本不准). 当 Bibi 到达一个节点时,如果该节点有未搜索过的儿子节点,则 Bibi 会走向未搜索过的儿子节点进行搜索,否则就返回父亲节点. 如果某节点拥有两个未搜索过的儿子节点, Bibi 会选择先搜索权值大的儿子节点.假设 Bibi 从一…
上篇中学习了二叉树的DFS深度优先搜索算法,这次学习另外一种二叉树的搜索算法:BFS,下面看一下它的概念: 有些抽象是不?下面看下整个的遍历过程的动画演示就晓得是咋回事啦: 了解其概念之后,下面看下如何实现它?在正式实现逐层遍历之前,需要解决一个问题,那就是:得知道该树有多少层,也就是树的深度如何计算,下面来解决这个问题: 还是基于上篇的搜索二叉树的代码进行实现: public class BinarySearchTree { TreeNode root = null; class TreeNo…
目录 数据结构 算法 数据结构 数组 有序二维数组查找 数组相对位置排序 数组顺时针输出 把数组排成最小的数 数组中的逆序对 扑克牌顺子 数组中重复的数字 构建乘积数组 链表 链表反向插入ArrayList 链表倒数第k个 反转链表 合并有序链表 带random指针的链表 两个链表的第一个公共结点 链表中环的入口结点 删除链表中重复的结点 复杂链表的复制 栈&队列 链表反向插入ArrayList 两个栈实现队列 斐比那契数列第n项 跳台阶 变态跳台阶 矩形覆盖 o(1)实现栈计算最小值 判断入栈…
A 比特手链 简单模拟 判断 贪心 叶姐要想哥赠送一串比特手链,这个手链由0和1组成.想哥买了手链B,无意间得知叶姐想要同样长度的手链A.想哥囊中羞涩,只能手工调整手链.他希望最少通过以下操作进行最少步骤把B变成A.注意:A != B  对于一个串S: 操作1--选择下标i,j,i != j:  ·result = S[i] & S[j]  ·S[i] = result & S[i]  ·S[j] = result & S[j] 操作2--选择下标i,j,i != j:  ·res…
题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.     思路: 递归,然后深搜,因为题目定义的,是从根到叶子节点的才算一条路径,所以,搜索到叶子节点的时候return ,每次把sum-当前节点的值,传给dfs函数.   class Solution { public: vector<vector<int> > ans; vector<int> path; vector…
题意:给一棵二叉树,要求找出任意两个节点(也可以只是一个点)的最大路径和,至少1个节点,返回路径和.(点权有负的.) 思路:DFS解决,返回值是,经过从某后代节点上来到当前节点且路径和最大的值.要注意如果子树传来的如果是负值,是可以同时丢弃的,但至少要将当前节点的val更新答案. /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right;…
[题目链接:J-堆] 1734: 堆 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 239  Solved: 113 SubmitStatusWeb Board Description…
给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度≤8). 样例输入 BADC BDCA 样例输出 ABCD #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ],ch2[]; int len1,len2; int dfs(int s,int e,int a,int b) {…
描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种.由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下: 1) T的根结点为R,其类型与串S的类型相同: 2) 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2:由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2. 现在给定一个长度为2^N的“0…
Given two binary trees, write a function to check if they are the same or not. Two binary trees are considered the same if they are structurally identical and the nodes have the same value. Example 1: Input: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] Outpu…
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. Note: A leaf is a node with no children. Example: Given binary tree [3,9,20,null,null,15,7…
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. Note: A leaf is a node with no children. Example: Given binary tree [3,9,20,null,null,15,7…