程序使用C ++在二叉树中打印从根到给定节点的路径

在本教程中,我们将讨论在二进制树中打印从根到给定节点的路径的程序。

对于具有不同节点的给定二叉树,我们必须打印完整路径以从二叉树的根节点到达特定的给定节点。

为了解决这个问题,我们将使用递归。在遍历二叉树时,我们将递归搜索要找到的特定元素。同时,我们将存储到达要搜索的元素的路径。

示例

#include <bits/stdc++.h>
using namespace std;
struct Node{
   int data;
   Node *left, *right;
};
struct Node* create_node(int data){
   struct Node *new_node = new Node;
   new_node->data = data;
   new_node->left = new_node->right = NULL;
   return new_node;
}
//检查从根节点到元素的路径是否存在
bool is_path(Node *root, vector<int>& arr, int x){
   if (!root)
      return false;
   arr.push_back(root->data);
   if (root->data == x)
      return true;
   if (is_path(root->left, arr, x) || is_path(root->right, arr, x))
      return true;
   arr.pop_back();
   return false;
}
//打印从根节点到元素的路径
void print_path(Node *root, int x){
   vector<int> arr;
   if (is_path(root, arr, x)){
      for (int i=0; i<arr.size()-1; i++)
         cout << arr[i] << " -> ";
         cout << arr[arr.size() - 1];
   }
   else
      cout << "Path doesn't exists" << endl;
}
int main(){
   struct Node *root = create_node(13);
   root->left = create_node(21);
   root->right = create_node(43);
   root->left->left = create_node(34);
   root->left->right = create_node(55);
   root->right->left = create_node(68);
   root->right->right = create_node(79);
   int x = 68;
   print_path(root, x);
   return 0;
}

输出结果

13 -> 43 -> 68