数据结构 - 求二叉树中结点的最大距离(C++)
// ------BTreeMaxNodeLength.cpp------ #include <iostream> using namespace std; template <class T>
struct BTNode
{
// 左孩子
BTNode<T> *lChild;
// 右孩子
BTNode<T> *rChild;
// 该结点的值
T data;
// 左子树最长距离
int leftSubTreeMaxLength;
// 右子树最长距离
int rightSubTreeMaxLength;
}; template <class T>
class BinaryTree
{
public:
void GetMaxNodeLength(BTNode<T> * root, int *maxNodeLength)
{
// 遍历到叶子结点,返回
if (root == NULL)
{
return;
} // 假设左子树为空,那么该结点左子树最长距离为0
if (root->lChild == NULL)
{
root->leftSubTreeMaxLength = 0;
} // 假设右子树为空,那么该结点右子树最长距离为0
if (root->rChild == NULL)
{
root->rightSubTreeMaxLength = 0;
} // 假设左子树不为空,递归查找左子树最长距离
if (root->lChild != NULL)
{
GetMaxNodeLength(root->lChild, maxNodeLength);
} // 假设右子树不为空,递归查找右子树最长距离
if (root->rChild != NULL)
{
GetMaxNodeLength(root->rChild, maxNodeLength);
} // 计算左子树中距离根结点的最长距离
if (root->lChild != NULL)
{
if (root->lChild->leftSubTreeMaxLength > root->lChild->rightSubTreeMaxLength)
{
root->leftSubTreeMaxLength = root->lChild->leftSubTreeMaxLength + 1;
}
else
{
root->leftSubTreeMaxLength = root->lChild->rightSubTreeMaxLength + 1;
}
} // 计算右子树中距离根结点的最长距离
if (root->rChild != NULL)
{
if (root->rChild->leftSubTreeMaxLength > root->rChild->rightSubTreeMaxLength)
{
root->rightSubTreeMaxLength = root->rChild->leftSubTreeMaxLength + 1;
}
else
{
root->rightSubTreeMaxLength = root->rChild->rightSubTreeMaxLength + 1;
}
} // 更新最长距离
if (root->leftSubTreeMaxLength + root->rightSubTreeMaxLength > *maxNodeLength)
{
*maxNodeLength = root->leftSubTreeMaxLength + root->rightSubTreeMaxLength;
}
}
};
数据结构 - 求二叉树中结点的最大距离(C++)的更多相关文章
- 求二叉树中第K层结点的个数
一,问题描述 构建一棵二叉树(不一定是二叉查找树),求出该二叉树中第K层中的结点个数(根结点为第0层) 二,二叉树的构建 定义一个BinaryTree类来表示二叉树,二叉树BinaryTree 又是由 ...
- IT公司100题-11-求二叉树中节点的最大距离
问题描述: 写程序,求一棵二叉树中相距最远的两个节点之间的距离. 10/ \6 14/ \ / \4 8 12 16 分析: 二叉树中最远的两个节点,要么是根 ...
- 二叉树 Java 实现 前序遍历 中序遍历 后序遍历 层级遍历 获取叶节点 宽度 ,高度,队列实现二叉树遍历 求二叉树的最大距离
数据结构中一直对二叉树不是很了解,今天趁着这个时间整理一下 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显 ...
- php数据结构之二叉树
树是一种比较重要的数据结构, 尤其是二叉树.二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之 分,其次序不能任意颠倒. ...
- 二叉树(9)----打印二叉树中第K层的第M个节点,非递归算法
1.二叉树定义: typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTree ...
- LeetCode OJ:Kth Smallest Element in a BST(二叉树中第k个最小的元素)
Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Not ...
- SDUT OJ 数据结构实验之二叉树八:(中序后序)求二叉树的深度
数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...
- SDUT-2804_数据结构实验之二叉树八:(中序后序)求二叉树的深度
数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 已知一颗二叉树的中序 ...
- <编程之美>经典面试题:求二叉树节点的最大距离(我的解法,最容易理解的版本?)
题目介绍: 如果把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两个节点之间的个数. 写一个程序求一棵二叉树中相距最远的两个节点之间的距离. 如下图所示, ...
随机推荐
- 使用top工具,找出消耗CPU 较多的进程
1.使用top工具,找出消耗CPU 较多的进程 [oracle@cuug ~]$ top top - 10:48:27 up 23:15, 4 users, load average: 1.09, ...
- 【转】 iOS 原生二维码扫描(可限制扫描区域)
在用 AVFoundation 完成扫码后,遇到2个问题: 1,如何限制扫描范围? 2.条形码如何扫描? 一位朋友的文章帮助了我,特地转来,可以帮到有需要的朋友. 原文:http://blog.csd ...
- iOS几种简单有效的数组排序方法
第一种,利用数组的sortedArrayUsingComparator调用 NSComparator ,obj1和obj2指的数组中的对象 NSComparator cmptr = ^(id obj1 ...
- iOS程序的完整启动过程(有storyboard)
1.先执行main函数,main内部会调用UIApplicationMain函数 2.UIApplicationMain函数里面做了什么事情:1> 创建UIApplication对象 2> ...
- VsCode使用技巧
VsCode版本1.7.2 1. node智能提示:vscode1.7之前的版本智能提示是采用jsconfig.json方式,在右下角会有小灯泡,点击创建jsconfig.json.1.7之后使用Ty ...
- jquery 工作空间注册
在一些面向对象的语言中有命名空间的概念,好处就是把不同的类放在不同的文件夹下面,这样就不会发生命名冲突,当然命名空间还有其他的作用. 在这里我们讨论的是在JS中怎么使用命名空间.当然JS并没有提供原生 ...
- dede 留言板访问的目录
D:\APMServ5.2.6\www\htdocs\xyhy\templets\plus guestbook.rar 文件 里面 DEDE留言簿的插件:
- python:UnboundLocalError: local variable 'xxx' referenced before assignment
近来一直都在学习python语言,偶然在伯乐在线看到2017年京东C/C++的面试题.就打算用python+ST3 IDE顺便敲下面试题代码. 原题 C语言: #include <stdio.h ...
- 如何利用PowerPoint2013制作阶梯流程图?
制作阶梯流程图有哪些窍门呢?下面我们一起来看看吧: ①启动PowerPoint2013,单击菜单栏--插入--形状,选择方角矩形,在图中画出来. ②画好矩形,摆放到合适的位置,如下图所示. ③然后再次 ...
- TIOBE.2017.01最新编程语言排行榜
Jan 2017 Jan 2016 Change Programming Language Ratings Change1 1 Java ...