[编程之美-14]求二叉树中节点的最大距离
来源:互联网 发布:西建大导师知乎 编辑:程序博客网 时间:2024/06/15 02:25
题目:如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义”距离”为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离.
例如:
10
/ \
5 12
/ \
4 7
这棵树的话,最大距离为3.分别路径为4,5,10,12共3条边,7,5,10,12共3条边,所以最大距离为3.
递归的思想,分别考虑左右子树的,从根节点开始.
代码如下:
#include<iostream>using namespace std;struct BiTreeNode{ int m_nValue; BiTreeNode *m_pleft; BiTreeNode *m_pright; int m_nMaxLeft; int m_nMaxRight;};int nMaxLen = 0;void findMaxLen(BiTreeNode *pRoot);void addBiTreeNode(BiTreeNode *&pCurrent, int value);int main(){ BiTreeNode *pRoot = NULL; addBiTreeNode(pRoot, 10); addBiTreeNode(pRoot, 5); addBiTreeNode(pRoot, 4); addBiTreeNode(pRoot, 7); addBiTreeNode(pRoot, 12); findMaxLen(pRoot); cout<<nMaxLen<<endl; return 0;}void findMaxLen(BiTreeNode *pRoot){ if(pRoot == NULL) return ; if(pRoot->m_pleft == NULL) pRoot->m_nMaxLeft = 0; if(pRoot->m_pright == NULL) pRoot->m_nMaxRight = 0; if(pRoot->m_pleft != NULL) findMaxLen(pRoot->m_pleft); if(pRoot->m_pright != NULL) findMaxLen(pRoot->m_pright); if(pRoot->m_pleft != NULL) { int nTempMax = 0; if(pRoot->m_pleft->m_nMaxLeft > pRoot->m_pleft->m_nMaxRight) nTempMax = pRoot->m_pleft->m_nMaxLeft; else nTempMax = pRoot->m_pleft->m_nMaxRight; pRoot->m_nMaxLeft = nTempMax + 1; } if(pRoot->m_pright != NULL) { int nTempMax = 0; if(pRoot->m_pright->m_nMaxLeft > pRoot->m_pright->m_nMaxRight) nTempMax = pRoot->m_pright->m_nMaxLeft; else nTempMax = pRoot->m_pright->m_nMaxRight; pRoot->m_nMaxRight = nTempMax + 1; } if(pRoot->m_nMaxLeft + pRoot->m_nMaxRight > nMaxLen) nMaxLen = pRoot->m_nMaxLeft + pRoot->m_nMaxRight; }void addBiTreeNode(BiTreeNode *&pCurrent, int value){ if(pCurrent == NULL) { BiTreeNode *pBiTree = new BiTreeNode(); pBiTree->m_nValue = value; pBiTree->m_pleft = NULL; pBiTree->m_pright = NULL; pCurrent = pBiTree; } else { if((pCurrent->m_nValue) > value) addBiTreeNode(pCurrent->m_pleft, value); else if((pCurrent->m_nValue) < value) addBiTreeNode(pCurrent->m_pright, value); }}
阅读全文
0 0
- [编程之美-14]求二叉树中节点的最大距离
- 编程之美 - 求二叉树节点的最大距离
- 编程之美 3.8 求二叉树中节点的最大距离 3.9 重建二叉树
- 读书笔记之编程之美 - 3.8 求二叉树中节点的最大距离
- 编程之美之求二叉树中节点的最大距离
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法(转)
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 编程之美: 求二叉树中节点的最大距离》的好解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- [K叉哈夫曼树]BZOJ 4198—— [Noi2015]荷马史诗
- [机器学习入门] 李宏毅机器学习笔记-37 (Deep Reinforcement Learning;深度增强学习入门)
- 1121. Damn Single (25) map,set
- KendoUI:Grid控件的使用
- 小白教你学c++(7)一异常语法专题
- [编程之美-14]求二叉树中节点的最大距离
- TreeMap小应用
- python 学习笔记3
- 浅谈zk(2) zookeeper的特性
- 莫队(bzoj 2038: [2009国家集训队]小Z的袜子(hose))
- 上海家长给孩子择校的福利 虎妈家,一站式教育规划网站
- FPGA学习网站推荐
- 原生ajax上传多图然后显示
- 浅谈zk(3).领导者与追随者如何协作?