diff --git a/contents/tree_traversal/code/c++/tree_example.cpp b/contents/tree_traversal/code/c++/tree_example.cpp index 519ff374e..748d4e243 100644 --- a/contents/tree_traversal/code/c++/tree_example.cpp +++ b/contents/tree_traversal/code/c++/tree_example.cpp @@ -26,6 +26,34 @@ void dfs_recursive(node const& n) { } } +void dfs_recursive_postorder(node const& n) { + for (auto const& child : n.children) { + dfs_recursive_postorder(child); + } + std::cout << n.value << '\n'; +} + + +void dfs_recursive_inorder_btree(node const& n) { + switch (n.children_size) { + case 2: + dfs_recursive_inorder_btree(n.children[0]); + std::cout << n.value << '\n'; + dfs_recursive_inorder_btree(n.children[1]); + break; + case 1: + dfs_recursive_inorder_btree(n.children[0]); + std::cout << n.value << '\n'; + break; + case 0: + std::cout << n.value << '\n'; + break; + default: + std::cout << "This is not a binary tree.\n"; + break; + } +} + // Simple non-recursive scheme for DFS void dfs_stack(node const& n) { // this stack holds pointers into n's `children` vector, @@ -76,7 +104,17 @@ node create_tree(size_t num_row, size_t num_child) { int main() { // Creating Tree in main auto root = create_node(3, 3); + auto binary_root = create_node(3, 2); + std::cout << "DFS recursive:\n"; dfs_recursive(root); + std::cout << "DFS post order recursive:\n"; + dfs_recursive_postorder(root); + std::cout << "DFS inorder binary tree:\n"; + dfs_recursive_inorder_btree(binary_root); + std::cout << "DFS stack:\n"; dfs_stack(root); + std::cout << "BFS queue:\n"; bfs_queue(root); + + return 0; } diff --git a/contents/tree_traversal/tree_traversal.md b/contents/tree_traversal/tree_traversal.md index b4b65d5f1..49ecb3368 100644 --- a/contents/tree_traversal/tree_traversal.md +++ b/contents/tree_traversal/tree_traversal.md @@ -75,8 +75,7 @@ Now, in this case the first element searched through is still the root of the tr {% sample lang="jl" %} [import:18-26, lang:"julia"](code/julia/Tree.jl) {% sample lang="cpp" %} -This has not been implemented in your chosen language, so here is the Julia code -[import:18-26, lang:"julia"](code/julia/Tree.jl) +[import:29-34 lang:"c_cpp"](code/c++/tree_example.cpp) {% sample lang="cs" %} [import:47-58, lang:"csharp"](code/csharp/Tree.cs) {% sample lang="c" %} @@ -109,8 +108,7 @@ In this case, the first node visited is at the bottom of the tree and moves up t {% sample lang="jl" %} [import:28-43, lang:"julia"](code/julia/Tree.jl) {% sample lang="cpp" %} -This has not been implemented in your chosen language, so here is the Julia code -[import:28-43, lang:"julia"](code/julia/Tree.jl) +[import:37-55 lang:"c_cpp"](code/c++/tree_example.cpp) {% sample lang="cs" %} [import:60-79, lang:"csharp"](code/csharp/Tree.cs) {% sample lang="c" %} @@ -153,7 +151,7 @@ In code, it looks like this: {% sample lang="jl" %} [import:45-56, lang:"julia"](code/julia/Tree.jl) {% sample lang="cpp" %} -[import:29-45, lang:"c_cpp"](code/c++/tree_example.cpp) +[import:58-73, lang:"c_cpp"](code/c++/tree_example.cpp) {% sample lang="cs" %} [import:81-94, lang:"csharp"](code/csharp/Tree.cs) {% sample lang="c" %} @@ -189,7 +187,7 @@ And this is exactly what Breadth-First Search (BFS) does! On top of that, it can {% sample lang="jl" %} [import:58-69, lang:"julia"](code/julia/Tree.jl) {% sample lang="cpp" %} -[import:47-61, lang:"c_cpp"](code/c++/tree_example.cpp) +[import:76-89, lang:"c_cpp"](code/c++/tree_example.cpp) {% sample lang="cs" %} [import:96-109, lang:"csharp"](code/csharp/Tree.cs) {% sample lang="c" %}