编程之美:求二叉树中节点的最大距离(非递归法)
来源:互联网 发布:网络协议分析题库答案 编辑:程序博客网 时间:2024/05/16 08:53
题目:如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之间边的个数。写一个程序求一颗二叉树中相距最远的两个节点之间的距离。
树的高度:树中节点的最大层次
相距最远的节点有2种情况:
1)经过根节点,2个节点在根节点左右子节点为根的子树上(左右子树不存在的时候以根节点代替节点);
最远距离 = 左子树深度 + 右子树深度;
2)不经过根节点,2个节点在根节点的同一个子节点为根的子树上;
最远距离 = 以左右子节点为根的子树的最远距离的最大值;
先求当前节点之前,先得求左右子节点为根的子树的深度,用递归肯定是很方便的方法,不过不用递归也是可以的。
二叉树的层次遍历会从根节点往子节点逐层遍历所有节点,把这些节点按顺序存储到双向链表中,再反向遍历双向链表中的各节点。
struct node{node* lchild;node* rchild;int height;//高度//求经过当前节点的左右子树各取一个叶子节点的路线最大距离int get_max_node_lengths(){int lheight = lchild ? lchild->height + 1 : 0;int rheight = rchild ? rchild->height + 1 : 0;height = lheight > rheight ? lheight : rheight;return lheight + rheight;}};int get_max_node_length(node* root){//1.对二叉树进行层次遍历,将节点存入双向链表中//2.反向遍历双向链表各节点,求以当前节点为根的子树高度,及该子树中经过当前节点的路线最大距离//3.返回2中求出的距离的最大值if (!root) return 0;int max_node_lengths = 0;list<node*> p;list<node*>::iterator iter;list<node*>::reverse_iterator rviter;p.push_back(root);//将根节点存入链表//层次遍历二叉树节点,将节点存入双向链表p中for (iter = p.begin(); iter != p.end(); ++ iter){if ((*iter)->lchild){//将非空左节点存入链表p.push_back((*iter)->lchild);}if ((*iter)->rchild){//将非空右节点存入链表p.push_back((*iter)->rchild);}}//反向遍历双向链表p中的节点for (rviter = p.rbegin(); rviter != p.rend(); ++ rviter){int cur_max_lengths = (*rviter)->get_max_node_lengths();if (max_node_lengths < cur_max_lengths)max_node_lengths = cur_max_lengths;}return max_node_lengths;}
1 0
- 编程之美:求二叉树中节点的最大距离(非递归法)
- 《编程之美》——求二叉树中节点的最大距离(非递归)
- 编程之美 求二叉树中节点的最大距离 非递归
- 编程之美之求二叉树中节点的最大距离(递归和非递归法)
- 编程之美之求二叉树中节点的最大距离(递归和非递归法)
- 编程之美 - 求二叉树节点的最大距离
- 编程之美 3.8 求二叉树中节点的最大距离 3.9 重建二叉树
- 读书笔记之编程之美 - 3.8 求二叉树中节点的最大距离
- 编程之美之求二叉树中节点的最大距离
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法(转)
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- NVIDIA CuDNN 安装说明
- 文件上传下载
- AOP之注解方式
- 黑盒测试
- MySQL优化
- 编程之美:求二叉树中节点的最大距离(非递归法)
- Java访问权限修饰词
- android 超牛逼Listview滑动删除等菜单+下拉刷新加载更多
- linux下解压命令大全
- 音乐播放(MediaPlayer,service,receiver,thread)
- UVA 1610 - Party Games
- 配置子目录Web.config使其消除继承,用虚拟目录创建多个网站的方法
- MFC ComBox组合控件框
- Tomcat内存、连接数等性能参数设置