数据结构 - 求二叉树中结点的最大距离(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 已知一颗二叉树的中序 ...
- <编程之美>经典面试题:求二叉树节点的最大距离(我的解法,最容易理解的版本?)
题目介绍: 如果把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两个节点之间的个数. 写一个程序求一棵二叉树中相距最远的两个节点之间的距离. 如下图所示, ...
随机推荐
- Wpf TextChanged事件导致死循环,事件触发循环问题
1.实例: 说明:当TextBox控件的Text内容发生变化时,TextChanged事件触发,并且会立即同步执行. 基于这个特点,设置一个全局变量标识,ChangeTxtB,如果是正在修改txtB的 ...
- show_space.sql.txt
create or replace procedure SHOW_SPACE(P_SEGNAME IN VARCHAR2, P_OWNER IN VARCHAR2 DEFAULT USER ...
- 局部线性嵌入(LLE)原理总结
局部线性嵌入(Locally Linear Embedding,以下简称LLE)也是非常重要的降维方法.和传统的PCA,LDA等关注样本方差的降维方法相比,LLE关注于降维时保持样本局部的线性特征,由 ...
- [转]Delphi 控件属性和事件
常用[属性] Action:该属性是与组件关联的行为,允许应用程序集中响应用户命令 Anchors:与组件连接的窗体的位置点 Align:确定组件的对齐方式 AutoSize:确定组件是否自动调整其大 ...
- Day3 set集合、函数和装饰器
set特性:无序,不重复,可嵌套 创建setset_example = set("123", "213", "234", "432 ...
- IDA6.6调试安卓程序配置教程
1.把ida 目录下android_server传到设备的 /data/local/tmp/ cmd执行adb shell 进入模拟器命令行 su cd /data/local/tmp/ chmod ...
- Python 函数传递list,传递dict 以及*args和**kargs
函数之间传递list: def show(ll): for i in ll: print(i) show(['chen','hang','wang','yadan']) #============== ...
- TCP回射客户程序:str_cli函数
str_cli函数完成客户处理循环: 从标准输入读入一行文本,写到服务器上,读回服务器对该行的回射,并把回射行写到标准输出上 读入一行,写到服务器 fgets读入一行文本,writen把该行发送给服务 ...
- codevs 1217 借教室
传送门 1217 借教室 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Descripti ...
- Scheme是什么、怎么自定义Scheme、JLRoutes的使用-备
转到移动端开发后居然现在才用到Scheme真是惭愧惭愧. URL Scheme是什么 相信大家都知道URL. http://www.apple.com就是一个URL. 而://之前的部分就称为Sche ...