LeetCode543- Diameter of Binary Tree
二叉树直径或二叉树中最长路径
/**
- Definition for a binary tree node.
- struct TreeNode {
-
int val;
-
TreeNode *left;
-
TreeNode *right;
-
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
- };
/
/*
最长路径一定会经过根节点,
规律为,
节点所在的最长路径为节点左子树最低点到右子树最低点
即路径长 = 左子树高度+右子树高度
因此,递归子树高度,在递归过程中更新最长路径值
/
class Solution {
public:
int diameter(TreeNode root,int &length) {
if(root==NULL) return 0;
int left = diameter(root->left,length);//返回值为左子树高度
int right = diameter(root->right,length);
if(left+right>length) length = left+right;//left+right是当前节点所在的的最长路径
return left>right?left+1:right+1;//返回子树高度,便于父节点计算最长路径
}
int diameterOfBinaryTree(TreeNode* root) {
int length = 0;
diameter(root,length);//length作为最长路径,在递归中更新
return length;
}
};