用 C 语言编写程序,打印二叉树中位于最左和最右的节点。
给定一棵左、右节点存在且已知的二叉树,任务是打印出指定树的准确的右、左子节点。
最左节点是与树的父节点关联,位于其左侧的节点;最右节点是与根节点的父节点关联,位于其右侧的节点。
示例
Input: 106 20 320 100 21 61 52 Output: 106 20 320 100 52
算法
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<node*> que Call que.push(root) Use STL vector<int> ans Loop While !que.empty() Set int n = que.size() Loop for int i =0 and i<n and i++ Set node *temp = que.front() Set que.pop() IF i=0 Set ans.push_back(temp->data) 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 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
示例
#include <bits/stdc++.h> using namespace std; //structure of a node { int data; struct node* left, *right; }; //structure to create a new node struct node* newNode(int val){ node* temp = new node; temp->data = val; temp->left = temp->right = NULL; return (temp); } //function to print corner elements of a tree void print(node *root) { if(root == NULL) return; queue<node*> que; que.push(root); vector<int> ans; while(!que.empty()){ int n = que.size(); for(int i =0;i<n;i++){ node *temp = que.front(); que.pop(); if(i==0) ans.push_back(temp->data); 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
广告