// ------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++)的更多相关文章

  1. 求二叉树中第K层结点的个数

    一,问题描述 构建一棵二叉树(不一定是二叉查找树),求出该二叉树中第K层中的结点个数(根结点为第0层) 二,二叉树的构建 定义一个BinaryTree类来表示二叉树,二叉树BinaryTree 又是由 ...

  2. IT公司100题-11-求二叉树中节点的最大距离

    问题描述: 写程序,求一棵二叉树中相距最远的两个节点之间的距离. 10/     \6      14/   \   /   \4    8 12    16 分析: 二叉树中最远的两个节点,要么是根 ...

  3. 二叉树 Java 实现 前序遍历 中序遍历 后序遍历 层级遍历 获取叶节点 宽度 ,高度,队列实现二叉树遍历 求二叉树的最大距离

    数据结构中一直对二叉树不是很了解,今天趁着这个时间整理一下 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显 ...

  4. php数据结构之二叉树

    树是一种比较重要的数据结构, 尤其是二叉树.二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之 分,其次序不能任意颠倒. ...

  5. 二叉树(9)----打印二叉树中第K层的第M个节点,非递归算法

    1.二叉树定义: typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTree ...

  6. 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 ...

  7. SDUT OJ 数据结构实验之二叉树八:(中序后序)求二叉树的深度

    数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...

  8. SDUT-2804_数据结构实验之二叉树八:(中序后序)求二叉树的深度

    数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 已知一颗二叉树的中序 ...

  9. <编程之美>经典面试题:求二叉树节点的最大距离(我的解法,最容易理解的版本?)

    题目介绍: 如果把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两个节点之间的个数. 写一个程序求一棵二叉树中相距最远的两个节点之间的距离. 如下图所示, ...

随机推荐

  1. Mavne + Spring整合CXF

    http://blog.csdn.net/xiongyu777888/article/details/23787615(没毛病) http://blog.csdn.net/hbsong75/artic ...

  2. 使用mailto在网页中链接Email地址

    <a>标签还有一个作用是可以链接Email地址,使用mailto能让访问者便捷向网站管理者发送电子邮件.我们还可以利用mailto做许多其它事情.下面一一进行讲解,请看详细图示: 注意:如 ...

  3. ASP.NET用SQL Server中的数据来生成JSON字符串

    原文引自:  作者: 缺水的海豚  来源: 博客园  发布时间: 2010-09-21 21:47  阅读: 6136 次  推荐: 0   原文链接   [收藏] 摘要:ExtJs用到的数据内容基本 ...

  4. 对C#泛型实例化对像--转

    最近在编写一套开发框架结构主要应用.Net 3.5以上的框架开发与应用.在此框架中应用了较多的泛型.下面来讲讲对泛型的实例化,以代码为例,如: public class A { } public cl ...

  5. C++对象数组操作误区

    由于语义上的需要导致语法的上缺陷,所以导致对象数组在C++中存在陷阱. C++语境:一个基类指针或引用是可以指向派生类对象的,以此可来表现C++对运行时多态的需求: 创建一个对象数组将返回首元素的首地 ...

  6. 服务器之间socket传输单链接和多连接测试结果

    今天做了一下测试,目的是看看局域网内服务器a,通过一个连接往服务器b传输数据,和通过多个连接传输的不同. 结果发现和多少个连接没关系,一个进程一个连接就能跑满网卡,只要write的时候够快,read的 ...

  7. asp.net实现 EXCEL数据导入到数据库功能

    在项目中经常要用EXCEL导入数据到数据库,提高工作效率. 注意:EXCEL中的第一行不能导入. 下面是源码: IntoExcel.aspx: [csharp] <%@ Page Languag ...

  8. Java学习----你可以告诉对象该怎么做(方法中传参)

    对象根据参数传递来的条件执行相应的功能. package org.demo.app2; public class App2 { public void print(String msg, int nu ...

  9. 2.2.1 创建一个 Path

    Demo: import java.nio.file.Path; import java.nio.file.Paths; /** * @author jinxing * @系统 MAC OS X * ...

  10. a便签 rel属性改变链接打开页面的方式

    <body> XHTML: <a href="http://www.baidu.com" rel="external">Baidu &l ...