使用 C++ 列印二叉樹中第一個最短根到葉路徑的程式
在本教程中,我們將討論一個列印二叉樹中第一個最短根到葉路徑的程式。
在這個程式中,我們將得到一個具有不同值的二叉樹,並且我們必須在給定的二叉樹中找到從根節點到葉節點的最短路徑。
為了解決這個問題,我們可以使用佇列來執行二叉樹的層序遍歷,並存儲最短路徑中的節點。為此,一旦我們到達最後一層的左最節點,我們就從佇列中檢索值並列印最短路徑。
示例
#include <bits/stdc++.h> using namespace std; struct Node{ struct Node* left; struct Node* right; int data; }; struct Node* create_node(int data){ struct Node* temp = new Node; temp->data = data; temp->left = NULL; temp->right = NULL; return temp; } void print_spath(int Data, unordered_map<int, int> parent){ if (parent[Data] == Data) return; print_spath(parent[Data], parent); cout << parent[Data] << " "; } void leftmost_path(struct Node* root){ queue<struct Node*> q; q.push(root); int LeafData = -1; struct Node* temp = NULL; unordered_map<int, int> parent; parent[root->data] = root->data; while (!q.empty()){ temp = q.front(); q.pop(); if (!temp->left && !temp->right){ LeafData = temp->data; break; } else{ if (temp->left){ q.push(temp->left); parent[temp->left->data] = temp->data; } if (temp->right) { q.push(temp->right); parent[temp->right->data] = temp->data; } } } print_spath(LeafData, parent); cout << LeafData << " "; } int main(){ struct Node* root = create_node(21); root->left = create_node(24); root->right = create_node(35); root->left->left = create_node(44); root->right->left = create_node(53); root->right->right = create_node(71); root->left->left->left = create_node(110); root->left->left->right = create_node(91); root->right->right->left = create_node(85); leftmost_path(root); return 0; }
輸出
21 35 53
廣告