数据结构和算法经典100题-第29题
2015-12-30 13:11
281 查看
题目要求:二叉树节点间的最大距离问题从二叉树的节点A出发,可以向上走或者向下走,但沿途的节点只能经过一次,当达到节点B时,路径上的节点数叫作A到B的距离。比如:
节点4和节点2的距离为2,节点5和节点6的距离为5。现在给定一棵二叉树的头结点,求整棵二叉树上节点间的最大距离。
题目解析:
此问题不难解决,也算是经典的问题了吧。其实节点间的最大距离有以下三种情况:
1.是其左子树上两节点间的最大距离;
2.是其右子树上两节点间的最大距离;
3.是其左子树上的高度+其右子树的高度+1;
比较这三个值就可以解决了,后序遍历二叉树,递归的每次从下至上返回树高以及其节点最大距离就okay了。
Okay,no code say what?
路漫漫其修远兮,吾将上下而求索…
1 2 3 4 5 6 7
节点4和节点2的距离为2,节点5和节点6的距离为5。现在给定一棵二叉树的头结点,求整棵二叉树上节点间的最大距离。
题目解析:
此问题不难解决,也算是经典的问题了吧。其实节点间的最大距离有以下三种情况:
1.是其左子树上两节点间的最大距离;
2.是其右子树上两节点间的最大距离;
3.是其左子树上的高度+其右子树的高度+1;
比较这三个值就可以解决了,后序遍历二叉树,递归的每次从下至上返回树高以及其节点最大距离就okay了。
Okay,no code say what?
struct Node { int value; Node *left; Node *right; }; void getDistence(Node *head, int &maxHigh, int &maxDis) { int maxLeftDis = 0; int maxRightDis = 0; int maxLeftHigh = 0; int maxRightHigh = 0; if (!head) { } if (!head->left) { getDistence(head->left, maxLeftHigh, maxLeftDis); } if (!head->right) { getDistence(head->right, maxRightHigh, maxRightDis); } maxHigh = (maxLeftHigh > maxRightHigh) ? (maxLeftHigh + 1) : (maxRightHigh + 1); maxDis = (maxLeftDis > maxRightDis) ? (maxLeftDis) : (maxRightDis); maxDis = (maxDis > maxHigh) ? maxDis : maxHigh; return ; }
路漫漫其修远兮,吾将上下而求索…
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#数据结构之顺序表(SeqList)实例详解
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 数据结构之Treap详解
- 浅析STL中的常用算法