C言語で特定のレベルでリーフノードを印刷する
このタスクには、ユーザーが指定した特定のレベルkで二分木のリーフノードを印刷することが含まれます。
リーフノードは、左右のポインタがNULLであるエンドノードです。これは、特定のノードが親ノードではないことを意味します。
例
Input : 11 22 33 66 44 88 77 Output : 88 77
ここで、kは印刷する必要のある木のレベルを表します。ここで使用されるアプローチは、すべてのノードをトラバースし、ノードにポインターがあるかどうかを確認することです。左または右、あるいはその両方を意味するポインタが1つある場合でも、その特定のノードをリーフノードにすることはできません。
左→ルート→右から開始してノードをレベルごとにトラバースするレベル順序手法を使用して、各ノードを再帰的にトラバースします。
以下のコードは、与えられたアルゴリズムのc実装を示しています
アルゴリズム
START Step 1 -> create node variable of type structure Declare int data Declare pointer of type node using *left, *right Step 2 -> create function for inserting node with parameter as new_data Declare temp variable of node using malloc Set temp->data = new_data Set temp->left = temp->right = NULL return temp Step 3 -> declare Function void leaf(struct node* root, int level) IF root = NULL Exit End IF level = 1 IF root->left == NULL && root->right == NULL Print root->data End End ELSE IF level>1 Call leaf(root->left, level - 1) Call leaf(root->right, level - 1) End Step 4-> In main() Set level = 4 Call New passing value user want to insert as struct node* root = New(1) Call leaf(root,level) STOP
例
include<stdio.h>
#include<stdlib.h>
//structre of a node defined
struct node {
struct node* left;
struct node* right;
int data;
};
//structure to create a new node
struct node* New(int data) {
struct node* temp = (struct node*)malloc(sizeof(struct node));
temp->data = data;
temp->left = NULL;
temp->right = NULL;
return temp;
}
//function to found leaf node
void leaf(struct node* root, int level) {
if (root == NULL)
return;
if (level == 1) {
if (root->left == NULL && root->right == NULL)
printf("%d\n",root->data);
} else if (level > 1) {
leaf(root->left, level - 1);
leaf(root->right, level - 1);
}
}
int main() {
printf("leaf nodes are: ");
struct node* root = New(11);
root->left = New(22);
root->right = New(33);
root->left->left = New(66);
root->right->right = New(44);
root->left->left->left = New(88);
root->left->left->right = New(77);
int level = 4;
leaf(root, level);
return 0;
} 出力
上記のプログラムを実行すると、次の出力が生成されます。
leaf nodes are: 88 77
-
C++でリーフノードから距離kにあるすべてのノードを出力します
この問題では、二分木と数Kが与えられます。葉のノードからkの距離にある木のすべてのノードを印刷する必要があります。 二分木 は、各ノードに最大2つのノード(1/2 /なし)がある特別なツリーです。 リーフノード 二分木のは、ツリーの最後にあるノードです。 この問題では、リーフノードからの距離はリーフノードよりも高いレベルのノードです。レベル4のリーフノードから距離2のノードがレベル2になるとします。 問題を理解するために例を見てみましょう K =2 出力 − 6 9. この問題を解決するために、ツリーをトラバースします。すべては、リーフノードに到達するレベルごとにすべて
-
C++プログラミングのバイナリツリー内のすべてのノードの印刷レベル。
二分木が与えられた場合、タスクは、1からnまでのノードに格納されているすべてのキーに関連付けられたレベルを出力することです 上記のツリーでは、ノードは- 10 at level 1 3 and 211 at level 2 140, 162, 100 and 146 at level 3 キーが与えられると、プログラムはその特定のキーのレベルを出力する必要があります。 例 Input: 10 3 211 140 162 100 146 Output: level of 10 is 1 Level of 3 is 2 &