104. 二叉树的最大深度
题目描述: 给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明:叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],返回深度为3
- 深度优先遍历:先序遍历,可递归,可用栈
//C 递归 int maxDepth(struct TreeNode* root){ if(root == NULL) return 0; else if(root -> left == NULL && root -> right == NULL) return 1; else { int lheight = 0, rheight = 0; lheight = maxDepth(root -> left); rheight = maxDepth(root -> right); return lheight > rheight ? lheight + 1 : rheight + 1; } } //栈
- 层次优先遍历:二叉树的高度即二叉树层数,使用lastNode遍历记录每一层的最后一个结点,使用curNode遍历记录当前遍历到的结点,当出栈结点和lastNode相同时证明已经遍历到每一层的最后一个结点了,层数加一,更新lastNode位curNode。
//JS var maxDepth = function(root) { if(!root) return 0; let level = 0, queue = [], lastNode, curNode, node; queue.push(root); lastNode = root; while(queue.length != 0){ node = queue.shift(); if(node.left) { queue.push(node.left); curNode = node.left; } if(node.right) { queue.push(node.right); curNode = node.right; } if(lastNode == node) { level++; lastNode = curNode; } } return level; };