二叉树的最长最短路径
最长路径
struct Node {
2 int value;
3 Node *left;
4 Node *right;
5 };
6 /**
7 * 首先考虑递归结束条件 到了叶子就回溯
8 * 然后考虑问题分解 每个根节点都找最长的子树,
9 * 最后考虑问题合并
10 * */
11 int TreeDepth(Node *root) {
12 if(root == NULL) return 0;
13 int leftDepth=0;
14 int rightDepth=0;
15 if(root->left != NULL)
16 leftDepth=TreeDepth(root->left);
17 if(root->right != NULL)
18 rightDepth=TreeDepth(root->right);
19
20 if(leftDepth > rightDepth)
21 return leftDepth+1;
22 else
23 return rightDepth+1;
24 }
先遍历,每个节点都看成根节点,其的值就是其左,右子树深度的最大值再加一。
最短路径,和最长路径基本一样,
先遍历,每个节点都看成根节点,其的值就是其左,右子树深度的最小值再加一。
struct Node {
2 int value;
3 Node *left;
4 Node *right;
5 };
6 /**
7 * 首先考虑递归结束条件
8 * 然后考虑问题分解
9 * 最后考虑问题合并
10 * */
11 int TreeDepth(Node *root) {
12 if(root == NULL) return 0;
13 int leftDepth=0;
14 int rightDepth=0;
15 if(root->left != NULL)
16 leftDepth=TreeDepth(root->left);
17 if(root->right != NULL)
18 rightDepth=TreeDepth(root->right);
19
20 if(leftDepth < rightDepth)
21 return leftDepth+1;
22 else
23 return rightDepth+1;
24 }