Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

การพิมพ์โหนดซ้ายสุดและขวาสุดของต้นไม้ไบนารีในโปรแกรม C


ได้รับต้นไม้ไบนารีที่มีลูกซ้ายและขวา งานคือพิมพ์ลูกขวาและซ้ายที่แน่นอนของต้นไม้ที่กำหนด

โหนดซ้ายสุดคือโหนดที่อยู่ด้านซ้ายจากโหนดพาเรนต์ของต้นไม้ โหนดขวาสุดคือโหนดที่อยู่ด้านขวาจากโหนดพาเรนต์ของรูท

ตัวอย่าง

Input: 106 20 320 100 21 61 52
Output: 106 20 320 100 52

การพิมพ์โหนดซ้ายสุดและขวาสุดของต้นไม้ไบนารีในโปรแกรม C

อัลกอริทึม

Start
Step 1 -> create structure of a node
  Declare int data
  Declare struct node *left and *right
Step 2 -> create struct node* newNode(int val)
  Create node* temp=new node
  Set temp->data = val
  Set temp->left = temp->right = NULL
  return (temp)
step 3 -> Declare Function void print(node *root)
  IF root == NULL
    Return
  Use STL queue que
  Call que.push(root)
  Use STL vector ans
  Loop While !que.empty()
    Set int n = que.size()
    Loop for int i =0; idata)
      End
      Else IF i==n-1
        Set ans.push_back(temp->data)
      End
      If temp->left
        Set que.push(temp->left)
      End
      IF temp->right
        Set que.push(temp->right)
      End
    End
  End
  Loop For auto i : ans
    Print i
  End
Step 4 -> In main()
  Declare node *root = newNode(106) to create a node
  Call print(root)
stop

ตัวอย่างโค้ด C++

#include 
using namespace std;
// โครงสร้างโหนด
struct node {
    int data;
    struct node* left, *right;
};
// สร้างโหนดใหม่
struct node* newNode(int val){
    node* temp = new node;
    temp->data = val;
    temp->left = temp->right = NULL;
    return (temp);
}
// ฟังก์ชันพิมพ์องค์ประกอบมุมของต้นไม้
void print(node *root) {
    if(root == NULL)
        return;
    queue que;
    que.push(root);
    vector ans;
    while(!que.empty()){
        int n = que.size();
        for(int i =0;idata);
            else if(i==n-1)
                ans.push_back(temp->data);
            if(temp->left)
                que.push(temp->left);
            if(temp->right)
                que.push(temp->right);
        }
    }
    for(auto i : ans)
        cout << i << " ";
}
int main (){
    node *root = newNode(106);
    root->left = newNode(20);
    root->right = newNode(320);
    root->left->left = newNode(100);
    root->left->right = newNode(21);
    root->right->left = newNode(61);
    root->right->right = newNode(52);
    print(root);
    return 0;
}

ผลลัพธ์

การรันโปรแกรมจะได้ผลลัพธ์ดังนี้:

106 20 320 100 52