Given a binary tree, find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
递归:
/** * 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 maxDepth(TreeNode* root) { if(root == NULL) return 0; int maxLeft=maxDepth(root->left); int maxRight=maxDepth(root->right); return maxLeft>maxRight?maxLeft+1:maxRight+1; } };
非递归:利用树的层次遍历(使用队列),并记录每一层的节点个数。
/** * 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 maxDepth(TreeNode* root) { if(root == NULL) return 0; queue<TreeNode *> q; q.push(root); int depth=0;// 记录深度 while(!q.empty()) { int len = q.size();//记录树当前层的结点个数 ++depth; while(len) { TreeNode * p=q.front(); if(p->left) q.push(p->left); if(p->right) q.push(p->right); q.pop(); --len; } } return depth; } };
输出二叉树每一层最右边的节点:len==1时对应的节点就是最右边的节点,输出即可。