给定一棵二叉树,你需要计算它的直径长度。

一棵二叉树的直径长度是任意两个结点路径长度中的最大值。

提示:这条路径可能穿过也可能不穿过根结点。

注意:两结点之间的路径长度是以它们之间边的数目表示。

解题思路:

给定一棵二叉树,求出树中任意两个结点距离的最大值。

首先明确距离最大的两个结点出现位置:

1)同时在根结点的左子树中 (图一)

2)同时在根结点的右子树中(图三)

3)左右子树中各有一个结点(图二)

假设我们分别得到了根结点左子树中两个结点最长距离,右子树中两个结点最长距离(这是求整棵树中两个结点最长距离的子问题罢了,既然程序能够求出整棵树两个结点最长距离,那么求左右子树中的最长距离只不过是两次递归调用而已),还要得到根结点左子树高度(最低层为0),这个高度代表左子树中最底层结点到根结点距离(图三),同样可以得到右子树高度。

将左子树两个结点最长距离,右结点两个结点最长距离,左、右子树高度之和比较,取得三者中的最大值,即为这棵二叉树中两个结点距离的最大值。

解法1:从根节点,依次递归遍历左右节点 (二叉树层次太深,有可能栈溢出)

使用递归进行求解,每次递归的过程中:

1)先求出以某个节点为树根的二叉树的左子树的最长深度 leftHigh、右子树的最长深度rightHigh

2)然后在递归函数中,用一个变量max来保存任意两个节点间的最长路径。

3)在求出左子树的最长深度 leftHigh 和右子树的最长深度 rightHigh 之后,就可以求出以该节点为根的二叉树的最长路径max。

侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!