传统使用递归方式,本题有两种方式:
a. 深度遍历:使用栈的方式来实现递归,栈的最大高度即为最大高度;
b. 层次遍历:使用队列,主要标记一层结束(每次插入NULL指针标记,或者使用计数器)和层次的累加;
下面给出层次遍历方式代码
int maxDepthWithLevelTraversal(TreeNode* root)
{
if(!root){
return 0;
}
int height = 0; // 初始化树的高度为0
queue<treenode>Q; // 初始化一个队列,并将根节点入队</treenode>
Q.push(root); /* 当队列不为空时 */
while(!Q.empty()){
height++;
int curLevelSize = Q.size(); // 记录当前层元素个数
int cnt = 0; /* 弹出当前层所有元素 */
while(cnt < curLevelSize){
TreeNode* temp = Q.front();
Q.pop();
cnt++; /* 将下一层的元素入队列 */
if(temp->left){
Q.push(temp->left);
}
if(temp->right){
Q.push(temp->right);
}
}
}
return height;
}"