二叉树-节点分析

通过问题了解:

某二叉树中度为2的结点有18个,则该二叉树中有

性质1:

二叉树的终端结点(叶子结点)数等于双分支结点数加1. 假设二叉树中终端结点数为n0,单分支结点数为n1,双分支结点数为n2,二叉树中总结点数为n,因为二叉树中所有结点度数均小于或等于2,所以有:n=n0+n1+n2;另一方面,二叉树中所有结点的分支数(即度数)应等于单分支结点数加上两倍的双分支结点数,即n1+2×n2.由树的性质1,有:n=n1+2×n2+1.根据以上两个式子,我们可以得出下面这个等式成立:n0+n1+n2= n1+2×n2+1,所以n0=n2+1.

设度为0,1和2的节点分别为x,y,z,则二叉树总结点数为S=2z+y+1或S=x+y+z,得z+1=x,即度为2的节点数比叶子节点树少1.

性质2:

2的结点数比叶子结点数少1,18+1=19
时间: 2024-07-31 09:18:58

二叉树-节点分析的相关文章

打印二叉树节点数值总和等于某个给定节点的所有路径

打印二叉树节点数值总和等于某个给定节点的所有路径,路径可以从任意节点开始,任意节点结束. 比如,假设和是8,树如下 的路径有  [[5,3],[8],[5,1,2]].  5  / \ 3     1 /\     /\ 4  8  2   6 思路:遍历所有路径,对于每一个节点,在其路径中向后寻找sum和为target的路径加入到结果中. public List<List<Integer>> findSum(TreeNode root,int sum){ List<List

研磨数据结构与算法-13删除二叉树节点

节点: /* * 二叉树节点 */ public class Node { //数据项 public long data; //数据项 public String sData; //左子节点 public Node leftChild; //右子节点 public Node rightChild; /** * 构造方法 * @param data */ public Node(long data,String sData) { this.data = data; this.sData = sDa

九度 1113 关于二叉树节点的个数问题

#include <stdio.h> #include <math.h> int main() { int n,m,left,right; int count; int deep_n,deep_m,deep_diff; int i, j; for( scanf("%d%d",&m,&n); n!=0 && m!=0; scanf("%d%d",&m,&n) ) { count = 0; left

二叉树节点定义

树是一种比较重要的数据结构,尤其是二叉树.二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒.二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决,当然有些题目非递归解法也应该掌握,如非递归遍历节点等等.本文努力对二叉树相关题目做一个较全的整理总结,希望对找工作的同学有所帮助. 二叉树节点定义如下:struct BinaryTreeNode{ int m_nValue; Bina

判断任一二叉树,是否为满二叉树.(输出二叉树,节点总数,二叉树深度)

#include "stdio.h"#include "malloc.h"int count;typedef struct node{ char data; struct node *LChild; struct node *RChild;}BiTNode,*BiTree; void creatbitree(BiTree * bt) // 先序便历序列创建二叉树链表{ char ch=getchar(); if (ch=='#') {  *bt=NULL; } el

3.19 Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题

[题目]: 如下的Node类是标准的二叉树节点结构: 1 public class Node{ 2 public int value; 3 public Node left; 4 public Node right; 5 6 public Node(int data){ 7 this.value = data; 8 } 9 } 再定义Query类如下: 1 public class Query{ 2 public Node o1; 3 public Node o2; 4 5 public Que

二叉树节点的最大距离

问题定义 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数.写一个程序求一棵二叉树中相距最远的两个节点之间的距离. 书上的解法 书中对这个问题的分析是很清楚的,我尝试用自己的方式简短覆述. 计算一个二叉树的最大距离有两个情况: 情况A: 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点. 情况B: 路径不穿过根节点,而是左子树或右子树的最大距离路径,取其大者. 只需要计算这两个情况的路径距离,并取其大者,就是该二叉树的最大距

二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)

将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: 1 typedef struct TreeNode{ 2 int data; 3 struct TreeNode *left; 4 struct TreeNode *right; 5 }TreeNode; 2.创建根节点: 1 TreeNode *creatRoot(){ 2 TreeNode * root =(TreeNode *)malloc(sizeof(TreeNode)); 3 if(NULL=

二叉树节点个数,叶子个数,第K层个数,最低公共节点

1. 节点个数 function getNodeNum(root){ if(root == null){ return 0; } //+1为root的计数 return getNodeNum(root.left) + getNodeNum(root.right) + 1; } 2. 叶子个数 function getLeafNum(root){ if(root == null){ return 0; } if(root.left == null && root.right == null)