diff --git a/Diameter of Binary Tree.cpp b/Diameter of Binary Tree.cpp new file mode 100644 index 00000000..d5db2323 --- /dev/null +++ b/Diameter of Binary Tree.cpp @@ -0,0 +1,127 @@ +#include <bits/stdc++.h> +using namespace std; + +/* A binary tree node has data, pointer to left child + and a pointer to right child */ +struct Node { + int data; + struct Node* left; + struct Node* right; +}; +Node* newNode(int val) { + Node* temp = new Node; + temp->data = val; + temp->left = NULL; + temp->right = NULL; + return temp; +} +Node* buildTree(string str) { + // Corner Case + if (str.length() == 0 || str[0] == 'N') return NULL; + + // Creating vector of strings from input + // string after spliting by space + vector<string> ip; + + istringstream iss(str); + for (string str; iss >> str;) ip.push_back(str); + + // Create the root of the tree + Node* root = newNode(stoi(ip[0])); + + // Push the root to the queue + queue<Node*> queue; + queue.push(root); + + // Starting from the second element + int i = 1; + while (!queue.empty() && i < ip.size()) { + + // Get and remove the front of the queue + Node* currNode = queue.front(); + queue.pop(); + + // Get the current node's value from the string + string currVal = ip[i]; + + // If the left child is not null + if (currVal != "N") { + + // Create the left child for the current node + currNode->left = newNode(stoi(currVal)); + + // Push it to the queue + queue.push(currNode->left); + } + + // For the right child + i++; + if (i >= ip.size()) break; + currVal = ip[i]; + + // If the right child is not null + if (currVal != "N") { + + // Create the right child for the current node + currNode->right = newNode(stoi(currVal)); + + // Push it to the queue + queue.push(currNode->right); + } + i++; + } + + return root; +} +/* Function to get diameter of a binary tree */ +int diameter(struct Node* tree); + +/* Driver program to test size function*/ +int main() { + int t; + scanf("%d\n", &t); + while (t--) { + string s; + getline(cin, s); + Node* root = buildTree(s); + cout << diameter(root) << endl; + } + return 0; +} +// } Driver Code Ends + + +/* Tree node structure used in the program + +struct Node +{ + int data; + struct Node* left; + struct Node* right; + + Node(int x){ + data = x; + left = right = NULL; + } +}; */ + +/* Computes the diameter of binary tree with given root. */ +int height(Node* root) +{ + if(root==NULL) + return 0; + + return 1+ max(height(root->left),height(root->right)); +} + +int diameter(Node* root) +{ + // Your code here + if(root==NULL) + return 0; + int h1= height(root->left); + int h2= height(root->right); + + return max( max(h1+h2+1,diameter(root->left)) , diameter(root->right) ); + +} diff --git a/Height of Binary tree.cpp b/Height of Binary tree.cpp new file mode 100644 index 00000000..ba6e7f16 --- /dev/null +++ b/Height of Binary tree.cpp @@ -0,0 +1,122 @@ +#include <bits/stdc++.h> +using namespace std; + +struct Node +{ + int data; + struct Node *left; + struct Node *right; + + Node(int val) { + data = val; + left = right = NULL; + } +}; + +// Function to Build Tree +Node* buildTree(string str) +{ + // Corner Case + if(str.length() == 0 || str[0] == 'N') + return NULL; + + // Creating vector of strings from input + // string after spliting by space + vector<string> ip; + + istringstream iss(str); + for(string str; iss >> str; ) + ip.push_back(str); + + // Create the root of the tree + Node *root = new Node(stoi(ip[0])); + + // Push the root to the queue + queue<Node*> queue; + queue.push(root); + + // Starting from the second element + int i = 1; + while(!queue.empty() && i < ip.size()) { + + // Get and remove the front of the queue + Node* currNode = queue.front(); + queue.pop(); + + // Get the current node's value from the string + string currVal = ip[i]; + + // If the left child is not null + if(currVal != "N") { + + // Create the left child for the current Node + currNode->left = new Node(stoi(currVal)); + + // Push it to the queue + queue.push(currNode->left); + } + + // For the right child + i++; + if(i >= ip.size()) + break; + currVal = ip[i]; + + // If the right child is not null + if(currVal != "N") { + + // Create the right child for the current node + currNode->right = new Node(stoi(currVal)); + + // Push it to the queue + queue.push(currNode->right); + } + i++; + } + + return root; +} + + // } Driver Code Ends + + +//User function template for C++ + +/* +struct Node +{ + int data; + struct Node* left; + struct Node* right; + + Node(int x){ + data = x; + left = right = NULL; + } +}; +*/ +class Solution{ + public: + int height(struct Node* node){ + // code here + if(node==NULL) + return 0; + return max(height(node->left),height(node->right))+1; + } +}; + +// { Driver Code Starts. +int main() +{ + int t; + scanf("%d ",&t); + while(t--) + { + string treeString; + getline(cin,treeString); + Node* root = buildTree(treeString); + Solution ob; + cout<<ob.height(root)<<endl; + } + return 0; +} // } Driver Code Ends