数据结构 - 求二叉树中结点的最大距离(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 已知一颗二叉树的中序 ...
- <编程之美>经典面试题:求二叉树节点的最大距离(我的解法,最容易理解的版本?)
题目介绍: 如果把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两个节点之间的个数. 写一个程序求一棵二叉树中相距最远的两个节点之间的距离. 如下图所示, ...
随机推荐
- 一个PHP开发者总结的九条建议
本文只是个人从实际开发经验中总结的一些东西,并不是什么名言警句,写出来有两个目的:一是时刻提醒自己要按照这些知识点来写自己代码,二是为了分享,说不定对你有用呢?万一,是吧... 1.首要意识:安全 大 ...
- 四大跨平台的APP分析
转载:http://blog.csdn.net/kenkao/article/details/50678269
- 开始Swift之旅 - HelloWorld
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- Win7下Solr4.10.1和MySql的整合(索引与搜索)
1.打开D:\webserver\solr\collection1\conf\solrconfig.xml文件,在<requestHandler name="/select" ...
- 关闭iOS的自动更新
Safari打开网址https://oldcat.me/web/NOOTA9.mobileconfig,安装描述文件,就不会自动下载和提示更新最新的iOS了
- [Git]更新远程代码到本地仓库
1. 查看远程仓库 $ git remote -v 2.从远程获取最新代码到本地 $ git fetch origin master 3.比较代码 $ git log -p master.. orig ...
- HTML&CSS基础学习笔记1.33-元素选择器
元素选择器 最常见的 CSS 选择器是元素选择器.换句话说,文档的元素就是最基本的选择器: p { text-indent:10px; color:blue; } 什么情况下使用元素选择器,一般我们这 ...
- MVC中的区域
authour: chenboyi updatetime: 2015-05-03 08:26:30 friendly link: 目录: 1,思维导图 2,AreaRegistration类的Re ...
- Oracle游标、参数的使用例子
/// <summary> /// 总部审核 /// </summary> /// <param name="ht"></param> ...
- 关于如何在C语言中嵌入汇编命令
转载自:http://www.keil.com/support/docs/2308.htm C51: GETTING INLINE ASSEMBLY TO WORK Information in th ...