#include <bits/stdc++.h> using namespace std; struct TreeNode { int val; Tr...
题目描述 输入一棵二叉树,求该树的深度。...从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度 思想: 如果这个结点为空层该层层数为0 如果这个结点不为空,则返回左子树喝右子树最深的并加上代表自己这层的1
1 二叉树的深度 题目: 输入一个二叉树的根节点,求该树的深度。从根节点到叶子节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度包含的节点数为为树的深度,即二叉树节点的层数。...对于任意一棵非空二叉树,有如下四种情况: (1)如果一颗树只有一个节点,它的深度是1; (2)如果根节点只有左子树而没有右子树,那么二叉树的深度应该是其左子树的深度加1; (3)如果根节点只有右子树而没有左子树...,那么二叉树的深度应该是其右树的深度加1; (4)如果根节点既有左子树又有右子树,那么二叉树的深度应该是其左右子树的深度较大值加1; 实现代码: int treeDepth(BinaryTreeNode...nLeft+1:nRight+1; } 2 二叉树的宽度 题目: 给定一颗二叉树,求二叉树的宽度。 宽度的定义: 二叉树的宽度定义为具有最多结点数的层中包含的结点数。...[2]求二叉树的深度和宽度
这个题目作为一个小练习,让我们对树的概念进一步的掌握,其实思路非常简单,在遍历树的过程中,计算某个节点如果leftChile和rightChild都指向NULL,那么证明其就是一个叶子节点,我们对引用计数加一就可以了...countleaf(tree->leftChild, count); // 继续遍历右侧子树 countleaf(tree->rightChild, count); } 代码非常简单,我们只需要将树的地址和一个计数的
我的解决方案: ? /** * Definition for a binary tree node....depth_l + 1:depth_r + 1; } }; 一行代码的解法: int maxDepth(TreeNode *root) { return root == NULL ?...0 : max(maxDepth(root -> left), maxDepth(root -> right)) + 1; } 不用递归的解法:Breadth-first-search int maxDepth...= NULL) q.push(p -> right); } } return res; } 不用递归的解法2 int maxDepth(...right); depth.push(num + 1); } } } return out; } python 的解决方案
求叶子的数量:递归来求 第一种写法: //计算叶子的数量 int getLeafNum(BinaryNode* root) { if (root == NULL) return 0; 叶子的数量...树的高度(深度) //树的高度 int getTreeHeight(BinaryNode* root) { //递归到当前函数时,如果结点为空,当前结点一层都不存在 if (root == NULL...#define _CRT_SECURE_NO_WARNINGS #include //二叉树的递归遍历 struct BinaryNode { //数据域 char ch; /...; } //通过递归记录有几个叶子 getLeafNum(root->lchild,num); getLeafNum(root->rchild,num); return *num; } //树的高度...:\n"); printf("%d",getLeafNum(&Anode,&num)); printf("\n树的高度:\n"); printf("%d", getTreeHeight(&Anode
在今天的内容中我们将会继续介绍二叉树的一些基本操作如二叉树的层次遍历、求二叉树的深度、求二叉树的结点总数、求二叉树第K层的结点数、求二叉树的叶结点数……以及如何通过C语言来实现这些基本操作。...,因此对结点操作时满足先入先出的操作特性,所以我们在实现层序遍历时借助了队列; 在二叉树中,二叉树的遍历是二叉树的其它操作的基础,不管是求二叉树的深度、求二叉树的总结点数、求二叉树第K层的结点数、求二叉树的叶结点数...二、求二叉树的深度 二叉树的深度也就是二叉树的高度同样也是二叉树的最大层次。...按照同样的思路,现在我们要求二叉树的深度,实际上就是求的二叉树的左子树的深度和右子树的深度,因此我们根据这种递归的思路就可以编写如下代码: //二叉树的深度——递归 int Depth2(BTN* root...l + 1 : r + 1;//返回左右子树深度的最大值+1 } 可以看到当我们在求二叉树的深度时,我们将其拆分成了求左子树的深度和右子树的深度,这种将问题拆分的思路是算法中的分治思想,目前我们先简单的了解一下
二叉树求深度和叶子数(20 分) 编写函数计算二叉树的深度以及叶子节点数。...二叉树采用二叉链表存储结构 函数接口定义: int GetDepthOfBiTree ( BiTree T); int LeafCount(BiTree T); 其中 T是用户传入的参数,表示二叉树根节点的地址...函数须返回二叉树的深度(也称为高度)。...struct BiTNode{ TElemType data; struct BiTNode *lchild, *rchild; } BiTNode, *BiTree; //先序创建二叉树各结点...data=e; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } return OK; } //下面是需要实现的函数的声明
本文链接:https://blog.csdn.net/weixin_42449444/article/details/85785671 题目描述: 哈夫曼树,第一行输入一个数n,表示叶结点的个数。...需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。 输入描述: 输入有多组数据。...输入样例: 5 1 2 2 5 9 输出样例: 37 相关知识: 给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman...哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 解题思路: 利用优先队列来求解,每次从队列中取出最小值和次小值累加之后再入队,一直算到结点大小为1,即根结点为止。.../取出队列中的次最小的元素 int min2 = l.top(); l.pop(); //计算最小值和次最小值的权值 sum += min1
html> JS
题目:给定一个整数数组nums,和一个目标值target,请在nums数组中找到两个数字相加等于target,输出这两个整数的下标。...思路:使用map(当然对象也可,但是性能相比map稍差些),循环nums,将当前循环下标a作为value,将目标值target减去当前循环项得到的值b作为key,储存到map中。...问题在于对于b的理解,b其实就是我们要在nums中寻找的值,因为这个差值b加上刚才的循环项c即等于我们的目标值target,一旦找到这个差值,也就是我们要找的这个差值b所在的下标,另外就是当前循环项d。...[obj[diff], index]; } else { obj[key] = index; } }}当然,如果嵌套两层循环也是可以实现这个需求的,
二叉树有许多不同的类型,其中比较常见的包括二叉搜索树、平衡二叉树、红黑树等。二叉搜索树的特点是,对于每个节点,它的左子树中所有节点的值都小于它的值,而右子树中所有节点的值都大于它的值。...二叉树的遍历是指按照一定的顺序访问树中的每个节点。...= null) { queue.offer(head.right); } } } 二叉树的深度和叶子节点的个数 public...int treeDepth(TreeNode root) {//求二叉树的深度 if (root == null) return 0; return Math.max(...treeDepth(root.left), treeDepth(root.right)) + 1; } public int treeLeaf(TreeNode root) {//求二叉树的叶子数量
给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。...示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。
二叉树的高度就是从根节点到最深的叶子节点之间的节点数,计算方法使用递归时,判断如果到了树的叶子节点那么就返回0。...依次遍历左侧和右侧节点的数量,然后求出最大值再算上当前根节点的数量+1,递归循环返回后得出最终的结果。...代码如下: int depthTree(TirTNode* tree) { if (NULL == tree) return 0; // 计算左子树的高度 int left = depthTree(tree...->leftChild); // 计算右子树的高度 int right = depthTree(tree->rightChild); // 记录左子树和右子树最深的数量 int max = left >...left : right; // 将高度+1,相当于加上了根节点的数量 max++; // 返回结果 return max; } 调用时只需要一句话就可以得到结果了。
线段树特别适合与区间相关的运算,比如MRQ(minimum range query)求一段区间内的最小值。...BIT可以看作是压缩了的线段树,由于(某类)线段树的右节点可以由父结点和左兄弟求出来,所以右结点就不用存了。...求冒泡排序的交换次数,直观的想可以直接在冒泡排序的过程中计算交换次数,时间复杂度是O(n^2)。交换次数其实是(位置在j的前面,数值还比aj大的数)j从0到n求和。...算法的特点是反复对某一区间内的所有元素求和,可以用BIT来优化。...做法是,i从0到n遍历,在循环的某一趟中,dat[ai]表示数字ai的之前出现过的次数,sum(ai)表示在这一趟之前,小于等于ai的数出现的次数。
定义四个变量,最大长度a1及对应的数组a2,临时最大长度b1及对应的数组b2,循环字符串,判断每个循环体c是否在临时最长数组b2内,在的话就b1+1,同时将c追加到b2内,否则将b1置为1,b2清空,然后追加...再将a1和a2取最大值,b1和b2取最大值,即得到了最大长度与之对应的数组 代码: function findMaxString(str) { if (typeof str !
求数组中的最大值 function getMax(a) { let max = a[0] for (let i = 0; i <a.length ; i...return min } let num = getMin([1,4,2,5,7,2,0]) document.write(num) 求任意两个数中的最大值
利用二叉搜索树的特性搞事情!...,请你计算树中任意两节点的差的绝对值的最小值。...示例: 提示:树中至少有 2 个节点。 思路 题目中要求在二叉搜索树上任意两节点的差的绝对值的最小值。 注意是二叉搜索树,二叉搜索树可是有序的。...遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值,这样就简单多了。 递归 那么二叉搜索树采用中序遍历,其实就是一个有序数组。...在一个有序数组上求两个数最小差值,这是不是就是一道送分题了。 最直观的想法,就是把二叉搜索树转换成有序数组,然后遍历一遍数组,就统计出来最小差值了。
#include <stdio.h> #include <stdlib.h> #include <string.h> struct node { cha...
序 本文主要记录一下leetcode树之二叉树的深度 deletion-in-binary-tree.png 题目 输入一棵二叉树的根节点,求该树的深度。...从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。...例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。...leftDepth + 1 : rightDepth + 1; }} 小结 这里采用递归的方式,递归计算maxDepth(root.left)及maxDepth(root.right),最后取它们的最大值...doc 二叉树的深度
领取专属 10元无门槛券
手把手带您无忧上云