이진 트리: 재귀 및 반복 방식을 사용하는 가장 깊은 노드의 최대 깊이/높이
11501 단어 bfsalgorithmsdatastructurebinarytree
여기 Dev.to 플랫폼에서 DSA에 대한 학습 내용을 쌓기 시작했습니다.
Leetcode 문제104. Maximum Depth of Binary Tree를 참조할 수 있습니다.
문제 설명
이진 트리의 루트가 주어지면 최대 깊이를 반환합니다.
A binary tree's maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
예 1:
(3)
/ \
(9) (20)
/ \
(15) (7)
입력: 루트 =
[3,9,20,null,null,15,7]
출력: 3
호출 기능
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
//return maxDepth_Recursive(root);
//return maxDepth_Iterative_BFS(root);
return maxDepth_usingHeightVariable(root);
}
}
1. 재귀 순회
private int maxDepth_Recursive(TreeNode root){
if(root == null) return 0;
return Math.max(maxDepth(root.left), maxDepth(root.right)) +1;
}
2. 반복 BFS
BFS를 사용하여 가장 높은 수준(가장 깊은 노드)을 얻을 수 있습니다. BFS를 구현하고 레벨 노드 목록의 크기를 반환합니다.
102. Binary Tree Level Order Traversal에 대한 자세한 내용은 이 질문을 확인하십시오.
private int maxDepth_Iterative_BFS(TreeNode root){
List<List<Integer>> resultList = new ArrayList<>();
if(root == null) return 0;
TreeNode curr = root;
Queue<TreeNode> q = new LinkedList<>();
q.offer(curr);
while(!q.isEmpty()){
int qSize = q.size();
List<Integer> subList = new ArrayList<>();
for(int i=0; i< qSize; i++){
curr = q.poll();
subList.add(curr.val);
if(curr.left != null){
q.offer(curr.left);
}
if(curr.right != null){
q.offer(curr.right);
}
}
//add to main list
resultList.add(subList);
}
return resultList.size();
}
3. 높이 변수를 이용한 반복 순회
private int maxDepth_usingHeightVariable(TreeNode root){
if(root == null) return 0;
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
int maxDepth = 0;
while(!q.isEmpty()){
maxDepth++;
int i = q.size();
while(i-- > 0){
TreeNode curr = q.poll();
if(curr.left != null){
q.offer(curr.left);
}
if(curr.right != null){
q.offer(curr.right);
}
}
}
return maxDepth;
}
Time Complexity for all the 3 way :
O(n)
Space Complexity for all the 3 way :O(n)
관련 문제
199. Binary Tree Right Side View
Reference
이 문제에 관하여(이진 트리: 재귀 및 반복 방식을 사용하는 가장 깊은 노드의 최대 깊이/높이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/metaverse/binary-tree-maximum-depthheight-of-deepest-node-using-recursive-and-iterative-way-hpp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)