/* This testcase is part of GDB, the GNU debugger. Copyright 2020-2022 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include struct node { int id; node *left; node *right; bool visited; }; node node_array[50]; unsigned int CUR_IDX = 0; node * make_node (int val) { node *new_node = &(node_array[CUR_IDX++]); new_node->left = NULL; new_node->right = NULL; new_node->id = val; new_node->visited = false; return new_node; } void tree_insert (node *root, int val) { if (val < root->id) { if (root->left) tree_insert (root->left, val); else root->left = make_node(val); } else if (val > root->id) { if (root->right) tree_insert (root->right, val); else root->right = make_node(val); } } void inorder (node *root) { std::vector todo; todo.push_back (root); while (!todo.empty()) { node *curr = todo.back(); todo.pop_back(); /* break-here */ if (curr->visited) std::cout << curr->id << " "; else { curr->visited = true; if (curr->right) todo.push_back (curr->right); todo.push_back (curr); if (curr->left) todo.push_back (curr->left); } } } int main (int argc, char **argv) { node *root = make_node (35); tree_insert (root, 28); tree_insert (root, 20); tree_insert (root, 60); inorder (root); return 0; }