求二叉树中节点的最大距离
来源:互联网 发布:eclipse如何写java 编辑:程序博客网 时间:2024/04/28 01:11
《编程之美》第3.8节:求二叉树中的最大距离
问题:如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们定义距离为两个节点之间的边数,求一棵二叉树中县局最远的两个节点之间的距离。
解法:树的后序遍历,然后再每个节点中维护两个变量nMaxLeft,nMaxRight保存当前节点为根节点的子树中的最远距离,不断更新maxLength,直到根节点。
代码:
#include<iostream>using namespace std;struct Node{Node *left;Node *right;int nMaxLeft;int nMaxRight;char value;Node(char v,Node *l=nullptr,Node *r=nullptr,int nl=0,int nr=0):value(v),left(l),right(r),nMaxLeft(nl),nMaxRight(nr){}};void findMaxLength(Node *root,int &maxLength){if(root->left==nullptr)root->nMaxLeft=0;else{findMaxLength(root->left,maxLength);root->nMaxLeft=max(root->left->nMaxLeft,root->left->nMaxRight)+1;}if(root->right==nullptr)root->nMaxRight=0;else{findMaxLength(root->right,maxLength);root->nMaxRight=max(root->right->nMaxLeft,root->right->nMaxRight)+1;}if(maxLength<root->nMaxLeft+root->nMaxRight)maxLength=root->nMaxLeft+root->nMaxRight;}int main(){Node *root=new Node('A');root->left=new Node('B');root->left->left=new Node('C');root->left->right=new Node('D');root->left->left->left=new Node('E');root->left->right->left=new Node('J');root->right=new Node('F');/*root->right->left=new Node('G');root->right->right=new Node('H');root->right->left->right=new Node('I');*/int result=0;findMaxLength(root,result);cout<<result<<endl;system("pause");return 0;}
0 0
- 【二叉树】求二叉树中节点的最大距离
- 求二叉树中节点最大距离
- 3.8求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 11、求二叉树中节点的最大距离...
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中两个节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- M序列
- Nginx 配置解析
- Linux监控系统开发详解(二)----make menuconfig过程详解
- codeforces #500B# New Year Permutation
- 课程设计报告 题目4
- 求二叉树中节点的最大距离
- PL/SQL 隐式游标
- 博弈知识汇总
- C# 移动不规则窗体
- Accept-Encoding: gzip,deflate 以压缩格式接收请求数据
- 知乎越来越无聊了,真是想破了脑袋找可以装逼的地方!
- javascript 中 正则表达式两种表达方式(regexp in javascript two ways expression)
- zoj 3841 Cards(组合数学)
- 基于状态机的串口通信解析