leet104.二叉树的最大深度 & 二叉树的遍历方法-先序、中序、后序、层次

题目:

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7]

返回它的最大深度 3 。

拓展:二叉树的遍历方法

二叉树的遍历:

         二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。

一般来说,有四种常见的二叉树的遍历方式。

1)、先序遍历
(2
)、中序遍历

(3)、后序遍历

4)、层次遍历

  • 二叉树的先序遍历: 三部曲:根--右   NLR
  • leet104.二叉树的最大深度 & 二叉树的遍历方法-先序、中序、后序、层次_第1张图片 leet104.二叉树的最大深度 & 二叉树的遍历方法-先序、中序、后序、层次_第2张图片
  •  l二叉树的中序遍历:三部曲:-根-右   LNR

leet104.二叉树的最大深度 & 二叉树的遍历方法-先序、中序、后序、层次_第3张图片leet104.二叉树的最大深度 & 二叉树的遍历方法-先序、中序、后序、层次_第4张图片

 

 

  • l二叉树的后序遍历:三部曲:-右-根   LRN

leet104.二叉树的最大深度 & 二叉树的遍历方法-先序、中序、后序、层次_第5张图片leet104.二叉树的最大深度 & 二叉树的遍历方法-先序、中序、后序、层次_第6张图片

 

 

  •  l二叉树的层序遍历:

leet104.二叉树的最大深度 & 二叉树的遍历方法-先序、中序、后序、层次_第7张图片leet104.二叉树的最大深度 & 二叉树的遍历方法-先序、中序、后序、层次_第8张图片

/**
 * Problem:
 *  二叉树的最大深度
 *
 *说明:
 *   叶子节点是指没有子节点的节点。
 * @author:Gallery
*/

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

/**
 * 思路一:递归遍历二叉树DFS方法
 * 复杂度分析
时间复杂度:我们每个结点只访问一次,因此时间复杂度为O(N),
空间复杂度:树是完全不平衡的,例如每个结点只剩下左子结点,递归将会被调用N次(树的高度),
因此保持调用栈的存储将是 O(N)。
(树是完全平衡的),树的高度将是 log(N),在这种情况下的空间复杂度将是 O(log(N))。
思路二:非递归方法,利用队列等数据结构,层次遍历
 * 
 * 
*/
int maxDepth(struct TreeNode* root){
    if(root == NULL){
        return 0;
    }
    int left_height = maxDepth(root->left);
    int right_height = maxDepth(root->right);
    if(left_height > right_height){
        return left_height+1;
    }else
    {
        return right_height +1;
    }
}

你可能感兴趣的:(C算法,LeetCode,日常编程,leetcode)