이진 트리의 반시계 방향 나선 순회는 순회하면 나선을 만들지만 역순으로 트리의 요소를 순회하는 것입니다. 다음 그림은 이진 트리의 반시계 방향 나선형 순회를 보여줍니다.
이진 트리의 나선형 탐색에 대해 정의된 알고리즘은 다음과 같은 방식으로 작동합니다. -
두 개의 변수 i와 j가 초기화되고 값은 i =0 및 j =변수의 높이와 같습니다. 플래그는 섹션이 인쇄되는 동안 확인하는 데 사용됩니다. 플래그는 초기에 false로 설정됩니다. i 예시
#include <bits/stdc++.h>
using namespace std;
struct Node {
struct Node* left;
struct Node* right;
int data;
Node(int data) {
this->data = data;
this->left = NULL;
this->right = NULL;
}
};
int height(struct Node* root) {
if (root == NULL)
return 0;
int lheight = height(root->left);
int rheight = height(root->right);
return max(1 + lheight, 1 + rheight);
}
void leftToRight(struct Node* root, int level) {
if (root == NULL)
return;
if (level == 1)
cout << root->data << " ";
else if (level > 1) {
leftToRight(root->left, level - 1);
leftToRight(root->right, level - 1);
}
}
void rightToLeft(struct Node* root, int level) {
if (root == NULL)
return;
if (level == 1)
cout << root->data << " ";
else if (level > 1) {
rightToLeft(root->right, level - 1);
rightToLeft(root->left, level - 1);
}
}
int main() {
struct Node* root = new Node(1);
root->left = new Node(2);
root->right = new Node(3);
root->left->left = new Node(4);
root->right->left = new Node(5);
root->right->right = new Node(7);
root->left->left->left = new Node(10);
root->left->left->right = new Node(11);
root->right->right->left = new Node(8);
int i = 1;
int j = height(root);
int flag = 0;
while (i <= j) {
if (flag == 0) {
rightToLeft(root, i);
flag = 1;
i++;
} else {
leftToRight(root, j);
flag = 0;
j--;
}
}
return 0;
}
출력
1 10 11 8 3 2 4 5 7