두 갈래 나무의 높이를 계산하는 세 가지 방법
2070 단어 알고리즘 문제
귀속
public class {
class TreeNode{
int val;
TreeNode left;
TreeNode right;
public TreeNode(int value){
this.val=value;
}
}
public int getHeight(TreeNode root){
if(root==null){
return 0;
}
int leftheight=getHeight(root.left);
int rightheight=getHeight(root.right);
return Math.max(leftheight, rightheight)+1;
}
}
비귀속
1. 두 갈래 나무를 뒤로 옮겨다니기
사고방식: 뒷순서에 따라 두 갈래 나무를 두루 훑어보고 노드의 최대 창고 길이는 두 갈래 나무의 높이이다.
public class Solution {
public int TreeDepth(TreeNode root) {
if(root==null){
return 0;
}
int height=0;
Stack nodes=new Stack<>();
Stack tag=new Stack<>();
while(root!=null||!nodes.isEmpty()){
while(root!=null){
nodes.push(root);
tag.push(0);
root=root.left;
}
if(tag.peek()==1){
height=Math.max(height, nodes.size());
nodes.pop();
tag.pop();
root=null;
}else{
root=nodes.peek();
root=root.right;
tag.pop();
tag.push(1);
}
}
return height;
}
}
2. 두 갈래 나무를 층별로 두루 훑는다
사고방식: 차원별로 두 갈래 나무를 두루 훑어보고 대열을 사용한다!!!!
public class {
static class TreeNode{
int val;
TreeNode left;
TreeNode right;
public TreeNode(int value){
this.val=value;
}
}
public static int getHeight(TreeNode root){
if(root==null){
return 0;
}
Queue queue=new LinkedList<>();
queue.add(root);
int height=1;
while(!queue.isEmpty()){
TreeNode node=queue.peek();
if(node.left==null&&node.right==null){
break;
}else{
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
queue.poll();
height++;
}
//System.out.println(height);
}
return height;
}
public static void main(String[] args){
TreeNode root=new TreeNode(1);
root.left=new TreeNode(2);
root.right=new TreeNode(3);
System.out.println(getHeight(root));
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[못 푼 문제] 백준 10989번sys.stdin.readline()을 사용하여 input의 시간을 줄였다. 또한 입력 가능한 수의 개수가 10,000,000개 이고 최대 입력 가능한 수가 10,000이기 때문에 모든 수를 입력 받아 리스트로 만들...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.