이진 트리가 주어지면 리프 노드를 인쇄한 다음 해당 리프 노드를 제거한 다음 트리에 노드가 남지 않을 때까지 반복해야 합니다.
예시
따라서 문제의 출력은 다음과 같아야 합니다. -
6 7 9 13 143 421
접근
우리는 DFS를 적용하는 접근 방식을 채택했습니다.
임시 값을 적용하려면 모든 값에 0을 할당한 다음 최대(두 자식의 값)+1 값으로 모든 노드를 할당합니다. .
알고리즘
STARTSTEP 1-> DEFINE A struct Node WITH DATA MEMBERS data, order, *left, *rightSTEP 2-> DEFINE A struct Node* newNode(int data, int order) WITH struct Node* node =new Node, node->데이터 =데이터, 노드->순서 =순서, 노드->왼쪽 =NULL, 노드->오른쪽 =NULL, 반환(노드)FUNCTION void postod(struct Node* node, vector>&v )STEP 1-> IF 노드 ==NULL THEN, RETURNSTEP 2-> CALL FUNCTION postod(node->left, v)STEP 3-> CALL FUNCTION postod(node->right, v)STEP 4-> IF 노드-> right ==NULL &&node->left ==NULL THEN, SET node->order AS 1 v.push_back(make_pair(node->order, node->data)) ELSE node->order =max((node-> 왼쪽)->순서, (노드->우측)->순서) + 1 v.push_back(make_pair(노드->순서, 노드->데이터))END IFFUNCTION void printLeafNodes(int n, vector >&v)STEP 1-> sort(v.begin(), v.end())STEP 2-> LOOP FOR i =0 AND i struct Node*와 같은 루트 노드 생성 root =newNode(8, 0)STEP 2-> DECLARE AND SET n =9STEP 3-> CALL postod(root, v);STEP 4-> CALL printLeafNodes(n, v);사전> 예시
#include네임스페이스 std;struct Node { int data; 정수 순서; 구조체 노드* 왼쪽; struct Node* right;};struct Node* newNode(int data, int order){ struct Node* node =new Node; 노드->데이터 =데이터; 노드->주문 =주문; 노드->왼쪽 =NULL; 노드->오른쪽 =NULL; return (node);}void postod(struct Node* node, vector >&v){ if (node ==NULL) return; /* 왼쪽 자식에서 먼저 반복 */ postod(node->left, v); /* 이제 오른쪽 자식에서 반복됩니다. */ postod(node->right, v); // 현재 노드가 리프 노드인 경우 순서는 1입니다. if (node->right ==NULL &&node->left ==NULL) { node->order =1; // 할당된 값과 트리 값의 쌍을 만듭니다. v.push_back(make_pair(node->order, node->data)); } else { 노드->순서 =최대((노드->왼쪽)->순서, (노드->오른쪽)->순서) + 1; v.push_back(make_pair(노드->순서, 노드->데이터)); }} 무효 printLeafNodes(int n, vector >&v){ sort(v.begin(), v.end()); for (int i =0; i 왼쪽 =newNode(2, 0); 루트->오른쪽 =newNode(3, 0); 루트->왼쪽->왼쪽 =newNode(4, 0); 루트->왼쪽->오른쪽 =newNode(6, 0); 루트->오른쪽->왼쪽 =newNode(14, 0); 루트->오른쪽->오른쪽 =newNode(9, 0); 루트 -> 왼쪽 -> 왼쪽 -> 왼쪽 =newNode(7, 0); 루트 -> 왼쪽 -> 왼쪽 -> 오른쪽 =newNode(13, 0); 정수 n =9; 벡터<쌍 > v; postod(루트, v); printLeafNodes(n, v); 반환 0;} 출력
이 프로그램은 출력물을 인쇄합니다 -
6 7 9 13 143 421