leetcode 222 Count Complete Tree Nodes (완전 이 진 트 리 포인트 계산)
3308 단어 알고리즘두 갈래 로 된 나무완전 이 진 트 리계산 노드 수
완전 이 진 트 리 의 노드 수 를 계산 하 다.완전 이 진 트 리 에 대한 정 의 는 위 키 백과 의 내용 을 참고 할 수 있 습 니 다.
2. 방법 과 사고방식
가장 간단 하고 생각 하기 쉬 운 방법 은 재 귀 를 사용 하여 좌우 서브 트 리 의 노드 수 를 재 귀 적 으로 계산 하 는 것 이다.그러나 이 방법 은 시간 을 초과 하기 쉬 워 일반적으로 바람 직 하지 않다.
int countNodes(TreeNode* root) {
if(root == NULL) return 0;
else if(root->left == NULL) return 1;
return countNodes(root->left) + countNodes(root->right);
}
이 코드 로 제출 하면 과연 시간 이 초과 되 었 다.그럼 어떻게 개선 할 까요?그것 은 만 이 진 트 리 를 이용 하여 알고리즘 을 간소화 하 는 것 이다.만 이 진 트 리 의 노드 수 계산 공식 은 N = 2 ^ h - 1. h 는 이 진 트 리 의 층수 이다.귀속 과정 은 다음 과 같다.
4. 567917. 현재 노드 를 뿌리 노드 로 하 는 수가 만 이 진 트 리 인지 판단 합 니 다. 노드 의 개 수 를 계산 하고 돌아 가면 다시 실행 하지 않 으 면 계속 아래로 실 행 됩 니 다
4. 567917. 현재 노드 의 왼쪽 나무 와 오른쪽 나무 에 대해 각각 판단 하고 하 나 를 더 하면 이 노드 의 수 를 나타 낸다
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */
class Solution {
public:
int nodesofMan(TreeNode* root){ // , 。
int l=1,r=1;
TreeNode *node = root;
while(node->left)
{
l++;
node = node->left;
}
node = root;
while(node->right)
{
r++;
node = node->right;
}
if(l == r)
return (int)pow(2,(double)l) - 1;
else
return 0;
}
int countNodes(TreeNode* root) {
if(root == NULL) return 0;
//else if(root->left == NULL) return 1;
if(nodesofMan(root)) return nodesofMan(root);
else
return countNodes(root->left) + countNodes(root->right) +1;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.