diff --git a/README.md b/README.md index 39cb373..22f2fc5 100644 --- a/README.md +++ b/README.md @@ -34,3 +34,8 @@ The purpose of this repository is to get all the Algorithms required for Competi 1)Spiral search in 2d array +## Trees_Algo +1) LCA.cpp +2) Topview.cpp +3) Bottomview.cpp +4) Common_tree_traversal.cpp \ No newline at end of file diff --git a/Trees_Algo/common_tree_traversal_methods.cpp b/Trees_Algo/common_tree_traversal_methods.cpp new file mode 100755 index 0000000..05b2cfa --- /dev/null +++ b/Trees_Algo/common_tree_traversal_methods.cpp @@ -0,0 +1,111 @@ +#include +#include +#include +#include +#include +using namespace std; + +struct node +{ + int data; + struct node *left; + struct node *right; +}; + +struct node *newnode(int data) +{ + struct node *p = new (struct node); + //struct node* p = (struct node*)malloc(sizeof(struct node)); + + p->data = data; + p->left = NULL; + p->right = NULL; + return p; +} + +//Inorder (Left, Root, Right) +//Preorder (Root, Left, Right) +//Postorder (Left, Right, Root) +//Levelorder +int height(node *root) +{ + // Write your code here. + if (root == NULL) + { + return 0; + } + if (root->left == NULL && root->right == NULL) + { + return 0; + } + return std::max(height(root->left) + 1, height(root->right) + 1); +} + +int printlevel(struct node *root, int level) +{ + if (root == NULL) + return 0; + if (level == 0) + cout << root->data << " "; + else + { + printlevel(root->left, level - 1); + printlevel(root->right, level - 1); + } +} + +void levelOrder(struct node *root) + +{ + int h = height(root); + for (int i = 0; i <= h; i++) + { + printlevel(root, i); + } +} + +int preorder(struct node *root) +{ + if (root == NULL) + return 0; + cout << root->data << " "; + preorder(root->left); + preorder(root->right); +} + +int inorder(struct node *root) +{ + if (root == NULL) + return 0; + inorder(root->left); + cout << root->data << " "; + inorder(root->right); +} +int postorder(struct node *root) +{ + if (root == NULL) + return 0; + postorder(root->left); + postorder(root->right); + cout << root->data << " "; +} + +int main() +{ + struct node *root = newnode(3); + root->left = newnode(7); + root->right = newnode(5); + root->right->right = newnode(11); + root->left->left = newnode(9); + + printf("\nTree traversed in preorder=\n"); + preorder(root); + printf("\nTree traversed in inorder=\n"); + inorder(root); + printf("\nTree traversed in postorder=\n"); + postorder(root); + printf("\nTree traversed in levelorder=\n"); + levelOrder(root); + + return 0; +}