1:深度优先遍历
1:深度优先遍历就是一条路走到黑的意思,一条路一直走到底再走另一条路。
2:二叉树的深度=max(左子树深度,右子树深度)+1,求一颗二叉树的深度就变为了求左子树和右子树的深度,问题的规模再减小,可以使用递归。
3:递归一定会有终止条件,当二叉树为空树时深度为0,就是终止条件。
2:递归代码
int maxDepth(struct TreeNode* root){
if (root == NULL)
{
return 0;
}
return fmax(maxDepth(root->left), maxDepth(root->right)) + 1;
}
3:广度优先遍历
1:按层序遍历的方式将每一层的节点都放入队列,每当一层出栈以后,深度加一。
4:代码
int maxDepth(struct TreeNode* root){
struct TreeNode *queue[6000];
int rear=0,front=0;
int deep=0;
if(root==NULL)
{
return deep;
}
queue[rear++]=root;
while(rear!=front)
{
int length=rear-front;//求出这一层有几个节点
for(int i=0;i<length;i++)//将这一层的节点全都出队
{
struct TreeNode *temp=queue[front++];
if(temp->left)
{
queue[rear++]=temp->left;
}
if(temp->right)
{
queue[rear++]=temp->right;
}
}
deep++;
}
return deep;
}