二叉树最远节点距离:以根节点为轴左右子树最大深度之和与以各个子树的根节点为轴左右子树的最大深度之和的较大者。
思路一:解决这个问题最直接的方式就是遍历。对每个节点求深度,之后再与保存的最大深度maxdepth进行对比,但是时间复杂度为O(n^2),这是一种比较糟糕的时间复杂度。
思路二:针对思路一,重复了大量的遍历工作,对每一个节点求深度,对最深的节点遍历了2^n次,没有线索化的二叉树遍历,最常用的是递归的方法,因此我们可以仅通过一次递归可以得到节点的深度和以此节点为根的子树的最大距离。
#include<stdio.h>
#include<stdlib.h>
//创建二叉树,二叉树中输入0表示空节点
typedef struct TNode
{
int data;
struct TNode *lchild,*rchild;
}TNode,*