#include <stdlib.h> #include <stack> using namespace std; //************************************* //题目: // 求一棵二叉树中距离相差最远的两个结点之间的距离。 // // //思路:注意指针声明了一定要赋值,否则会报错。 // 方法一:递归法 //距离相差最远的两个结点,共有以下两种情况: // (1)路径经过根结点,所以两个结点在根结点的不同分支上 // (2)路径不经过根结点,所以两个结点应该是次根结点中相聚最远的两个结点。(递归思想) // 递归本质上还是采用了后续遍历的方法。由于是从叶子结点开始的所以每次处理都是第一种情况。 // 方法二:非递归法 //采用后序遍历二叉树的同时对二叉树的结点进行更新,每次更新都要更新最大距离。 // //************************************* // //定义结点结构 // struct NODE { NODE* pLeft; NODE* pRight; int nMaxLeft; int nMaxRight; char nValue; }; int tMaxLength=0; //最大距离 stack<NODE*> s; // //求最大距离(方法一) // void findMaxLength1(NODE* root) { //递归结束 if(root==NULL) return; // //左树为空 // if(root->pLeft==NULL) root->nMaxLeft=