[LeetCode]543. Diameter of Binary Tree(计算二叉树的直径的长度)
2017-05-27 23:10
393 查看
543. Diameter of Binary Tree
原题链接Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.
给定一个二叉树,你需要计算树的直径的长度。 二叉树的直径是树中任意两个节点之间最长路径的长度。 此路径可能通过或不能通过根。
Example:
Given a binary tree
1 / \ 2 3 / \ 4 5 Return 3, which is the length of the path [4,2,1,3] or [5,2,1,3].
Note: The length of path between two nodes is represented by the number of edges between them.
注意:两个节点之间的路径长度由它们之间的边数表示。
思路:
定义一个变量diameter,保存给定二叉树最大diameter值。
通过递归计算左右子树的深度来计算每个节点的diameter,通过和变量 diameter 进行比较,保存较大值。
在每一次递归结束后,返回节点左右子树较大的深度,左子树和右子树的深度相加就是根该节点的diameter。
代码如下:
C++ struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { public: int diameter = 0;// 全局变量,记录最大直径 int diameterOfBinaryTree(TreeNode* root) { if(root==nullptr || (root->left==nullptr && root->right==nullptr))//空节点 或者 左右孩子均为空的节点 return 0; getDepth(root); return diameter; } // 此函数是返回树的最大深度 int getDepth(TreeNode* root){ if(root == nullptr) return 0; int left = getDepth(root->left); int right = getDepth(root->right); if(left+right > diameter)//左子树和右子树的深度相加就是根该节点的直径 diameter = left + right; return right>left ? right+1 : left+1;//返回节点左右子树中较大的深度 } };
相关文章推荐
- [LeetCode] Diameter of Binary Tree 二叉树的直径
- [leetcode 298] Binary Tree Longest Consecutive Sequence---求二叉树连续序列的长度
- [LeetCode] 543. Diameter of Binary Tree 二叉树的直径
- leetcode:Maximum Depth of Binary Tree(计算二叉树深度) 【面试算法】
- LeetCode 543. Diameter of Binary Tree (二叉树的直径)
- Binary Tree Level Order Traversal II 二叉树按层遍历(反向输出)@LeetCode
- [LeetCode 111] - 二叉树的最小深度 (Minimum Depth of Binary Tree)
- LeetCode Binary Tree Preorder Traversal (二叉树先序遍历非递归)
- LeetCode Binary Tree Inorder Traversal 中序遍历二叉树
- LeetCode(Minimum Depth of Binary Tree) 二叉树的最低高度
- Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序重建二叉树@LeetCode
- LeetCode Binary Tree Postorder Traversal(二叉树的后序遍历 非递归实现)
- Flatten Binary Tree to Linked List (二叉树转前序链表)【leetcode】
- 二叉树系列 - 二叉搜索树 - [LeetCode] 中序遍历中利用 pre节点避免额外空间。题:Recover Binary Search Tree,Validate Binary Search Tree
- LeetCode(Construct Binary Tree from Preorder and Inorder Traversal )根据二叉树的中序遍历和后序遍历重建二叉树
- leetCode解题报告之Binary Tree Level Order Traversal II,I(二叉树层次遍历)
- 【LeetCode】Binary Tree Level Order Traversal--(二叉树层序遍历)
- Binary Tree Zigzag Level Order Traversal (LeetCode) 层序遍历二叉树
- LeetCode Binary Tree Preorder Traversal 前序遍历二叉树 递归和非递归解法
- Binary Tree Preorder Traversal 二叉树的先序@LeetCode