LeetCode는 매일 한 문제 104.두 갈래 나무의 최대 깊이
104. 두 갈래 나무의 최대 깊이
Tag Tree
DFS
Difficulty Easy
Link https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/
분석
깊이 우선 검색을 사용하여 트리의 깊이를 따라 트리의 노드를 훑어봅니다.
첫 번째는 귀속 방법이에요.
귀속 호출의 매개 변수는 창고 공간을 통해 전달되며, 호출 과정에서 라인의 창고 자원을 차지한다
그리고 마지막 끝점 함수까지 가야 순서대로 종료할 수 있습니다. 그 전까지 점용된 창고 공간은 방출되지 않았습니다.
따라서 귀속 호출 횟수가 너무 많아서 창고 자원이 라인의 최대치를 초과하면 넘쳐나고 프로그램이 이상합니다
그래서 두 번째 방법을 사용하려고 합니다.
창고나 대기열을 이용하여 귀속을 비귀속으로 바꾸다
풀다
1. 귀속
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
int ans = dfs(root);
return ans;
}
private int dfs(TreeNode root) {
//
if (root == null) return 0;
else {
//
int depth_left = dfs(root.left);
//
int depth_right = dfs(root.right);
return Math.max(depth_left, depth_right) + 1;
}
}
}
복잡도
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
int ans = dfs(root);
return ans;
}
private int dfs(TreeNode root) {
//
if (root == null) return 0;
else {
//
int depth_left = dfs(root.left);
//
int depth_right = dfs(root.right);
return Math.max(depth_left, depth_right) + 1;
}
}
}
2. 비귀속
class Solution {
public int maxDepth(TreeNode root) {
if (root == null) return 0;
//
Stack<Pair<TreeNode, Integer>> stack = new Stack<>();
stack.push(new Pair<>(root, 1));
int maxDepth = 0;
while (!stack.isEmpty()) {
Pair<TreeNode, Integer> pair = stack.pop();
TreeNode node = pair.getKey();
maxDepth = Math.max(maxDepth, pair.getValue());
int currDepth = pair.getValue();
// , right, left, left
if (node.right != null) {
stack.push(new Pair<>(node.right, currDepth+1));
}
if (node.left != null) {
stack.push(new Pair<>(node.left, currDepth+1));
}
}
return maxDepth;
}
}
복잡도
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.