{"id":1716,"date":"2020-06-11T11:52:47","date_gmt":"2020-06-11T11:52:47","guid":{"rendered":"https:\/\/blog.prepbytes.com\/?p=1716"},"modified":"2022-03-23T23:43:56","modified_gmt":"2022-03-23T23:43:56","slug":"maximum-turns","status":"publish","type":"post","link":"https:\/\/prepbytes.com\/blog\/maximum-turns\/","title":{"rendered":"Maximum Turns"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645528024158-Article_396.png\" alt=\"\" \/><\/p>\n<h3>Concepts Used<\/h3>\n<blockquote>\n<p>DFS , Recursion<\/p>\n<\/blockquote>\n<h3>Difficulty Level<\/h3>\n<blockquote>\n<p>Hard<\/p>\n<\/blockquote>\n<h3>Problem Statement :<\/h3>\n<blockquote>\n<p>Given a binary tree, find the path length having maximum number of bends.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/mycode.prepbytes.com\/problems\/trees\/MAXTRN\" title=\"Go to mycode.prepbytes.com\" target=\"_blank\" rel=\"noopener noreferrer\"><u><strong><\/strong><\/u><\/a><\/p>\n<h3>Solution Approach :<\/h3>\n<h4>Introduction :<\/h4>\n<blockquote>\n<p>Bend indicates switching from left to right or vice versa while traversing in the tree.<br \/>\nFor example, consider below paths (L means moving leftwards, R means moving rightwards):<\/p>\n<p>LLRRRR \u2013 1 Bend<\/p>\n<p>RLLLRR \u2013 2 Bends<\/p>\n<p>LRLRLR \u2013 5 Bends<\/p>\n<\/blockquote>\n<p><img decoding=\"async\" src=\"https:\/\/prepbytes.com\/blog\/wp-content\/uploads\/2020\/06\/maxtrn.png\" alt=\"\" \/><\/p>\n<h4>Approach :<\/h4>\n<blockquote>\n<p>The idea is to traverse <strong>left<\/strong> and <strong>right<\/strong> subtrees of the root for each node. While traversing, we will keep track of the direction (left or right). Whenever, direction changes from left to right or right to left, increment the number of turns by <code>1<\/code>.<\/p>\n<p>On reaching the leaf node, compare the number of turns with the maximum number of turns (i.e. maxBends) seen so far in a root-to-leaf path. If the number of turns in the current path is greater than the maxBends, then update the maxBends in the current path and also update the maximum path length (i.e. len) of the current path.<\/p>\n<\/blockquote>\n<h3>Complexity Analysis :<\/h3>\n<blockquote>\n<p>Since we are traversing each node atmost once, time complexity of this approach is <code>O(n)<\/code>.<\/p>\n<\/blockquote>\n<h3>SOLUTIONS:<\/h3>\n<p>\t\t\t\t\t\t<style>\r\n\t\t\t\t\r\n\t\t\t\t\t#tab_container_1718 {\r\n\toverflow:hidden;\r\n\tdisplay:block;\r\n\twidth:100%;\r\n\tborder:0px solid #ddd;\r\n\tmargin-bottom:30px;\r\n\t}\r\n\r\n#tab_container_1718 .tab-content{\r\n\tpadding:20px;\r\n\tborder: 1px solid #e6e6e6 !important;\r\n\tmargin-top: 0px;\r\n\tbackground-color:#ffffff !important;\r\n\tcolor: #000000 !important;\r\n\tfont-size:16px !important;\r\n\tfont-family: Open Sans !important;\r\n\t\r\n\t\tborder: 1px solid #e6e6e6 !important;\r\n\t}\r\n#tab_container_1718 .wpsm_nav-tabs {\r\n    border-bottom: 0px solid #ddd;\r\n}\r\n#tab_container_1718 .wpsm_nav-tabs > li.active > a, #tab_container_1718 .wpsm_nav-tabs > li.active > a:hover, #tab_container_1718 .wpsm_nav-tabs > li.active > a:focus {\r\n\tcolor: #000000 !important;\r\n\tcursor: default;\r\n\tbackground-color: #ffffff !important;\r\n\tborder: 1px solid #e6e6e6 !important;\r\n}\r\n\r\n#tab_container_1718 .wpsm_nav-tabs > li > a {\r\n    margin-right: 0px !important; \r\n    line-height: 1.42857143 !important;\r\n    border: 1px solid #d5d5d5 !important;\r\n    border-radius: 0px 0px 0 0 !important; \r\n\tbackground-color: #e8e8e8 !important;\r\n\tcolor: #000000 !important;\r\n\tpadding: 15px 18px 15px 18px !important;\r\n\ttext-decoration: none !important;\r\n\tfont-size: 14px !important;\r\n\ttext-align:center !important;\r\n\tfont-family: Open Sans !important;\r\n}\r\n#tab_container_1718 .wpsm_nav-tabs > li > a:focus {\r\noutline: 0px !important;\r\n}\r\n\r\n#tab_container_1718 .wpsm_nav-tabs > li > a:before {\r\n\tdisplay:none !important;\r\n}\r\n#tab_container_1718 .wpsm_nav-tabs > li > a:after {\r\n\tdisplay:none !important ;\r\n}\r\n#tab_container_1718 .wpsm_nav-tabs > li{\r\npadding:0px !important ;\r\nmargin:0px;\r\n}\r\n\r\n#tab_container_1718 .wpsm_nav-tabs > li > a:hover , #tab_container_1718 .wpsm_nav-tabs > li > a:focus {\r\n    color: #000000 !important;\r\n    background-color: #e8e8e8 !important;\r\n\tborder: 1px solid #d5d5d5 !important;\r\n\t\r\n}\r\n#tab_container_1718 .wpsm_nav-tabs > li > a .fa{\r\n\r\nmargin-right:5px !important;\r\n\r\nmargin-left:5px !important;\r\n\r\n\r\n}\r\n\r\n\t\t#tab_container_1718 .wpsm_nav-tabs a{\r\n\t\t\tbackground-image: none;\r\n\t\t\tbackground-position: 0 0;\r\n\t\t\tbackground-repeat: repeat-x;\r\n\t\t}\r\n\t\t\t\r\n\r\n\r\n#tab_container_1718 .wpsm_nav-tabs > li {\r\n    float: left;\r\n    margin-bottom: -1px !important;\r\n\tmargin-right:0px !important; \r\n}\r\n\r\n\r\n#tab_container_1718 .tab-content{\r\noverflow:hidden !important;\r\n}\r\n\r\n\r\n@media (min-width: 769px) {\r\n\r\n\t#tab_container_1718 .wpsm_nav-tabs > li{\r\n\t\tfloat:left !important ;\r\n\t\t\t\tmargin-right:-1px !important;\r\n\t\t\t\t\t}\r\n\t#tab_container_1718 .wpsm_nav-tabs{\r\n\t\tfloat:none !important;\r\n\t\tmargin:0px !important;\r\n\t}\r\n\r\n\t#tab_container_1718 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_1718 .wpsm_nav{\r\n\t\t\t}\r\n\r\n}\r\n\r\n\r\n\r\n@media (max-width: 768px) {\r\n\t#tab_container_1718 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_1718 .wpsm_nav{\r\n\t\t\t}\r\n}\r\n\r\n\r\n\t.wpsm_nav-tabs li:before{\r\n\t\tdisplay:none !important;\r\n\t}\r\n\r\n\t@media (max-width: 768px) {\r\n\t\t\t\t\r\n\t\t\t\t.wpsm_nav-tabs{\r\n\t\t\tmargin-left:0px !important;\r\n\t\t\tmargin-right:0px !important; \r\n\t\t\t\r\n\t\t}\r\n\t\t\t\t#tab_container_1718 .wpsm_nav-tabs > li{\r\n\t\t\tfloat:none !important;\r\n\t\t}\r\n\t\t\t\r\n\t}\t\t\t\t<\/style>\r\n\t\t\t\t<div id=\"tab_container_1718\" >\r\n\t \r\n\t\t\t\t\t<ul class=\"wpsm_nav wpsm_nav-tabs\" role=\"tablist\" id=\"myTab_1718\">\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  class=\"active\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_1718_1\" aria-controls=\"tabs_desc_1718_1\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>C<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_1718_2\" aria-controls=\"tabs_desc_1718_2\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>C++<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\t\t\t\t <\/ul>\r\n\r\n\t\t\t\t\t  <!-- Tab panes -->\r\n\t\t\t\t\t  <div class=\"tab-content\" id=\"tab-content_1718\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane  in active \" id=\"tabs_desc_1718_1\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"c\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n#include <stdio.h>\r\n\r\n#include<stdlib.h>\r\n\r\n#define ll long long\r\n\r\n#define REP(i, n) for (i = 0; i < n; i++)\r\n\r\n\r\n\r\nstruct nodelist\r\n\r\n{\r\n\r\n    ll value;\r\n\r\n    struct nodelist *left;\r\n\r\n    struct nodelist *right;\r\n\r\n};\r\n\r\ntypedef struct nodelist node;\r\n\r\nstruct Queue\r\n\r\n{\r\n\r\n    int front, rear, size;\r\n\r\n    unsigned capacity;\r\n\r\n    node* *array;\r\n\r\n};\r\n\r\ntypedef struct Queue queue;\r\n\r\n\r\n\r\nqueue* createQueue(unsigned capacity)\r\n\r\n{\r\n\r\n    queue* qu =(queue*)malloc(sizeof(queue));\r\n\r\n    qu->capacity = capacity;\r\n\r\n    qu->front = qu->size =0;\r\n\r\n    qu->rear = capacity-1;\r\n\r\n    qu->array = (node **)malloc(qu->capacity * sizeof(node));\r\n\r\n    return qu;\r\n\r\n}\r\n\r\n\r\n\r\nint isFull(queue*  queue1)\r\n\r\n{\r\n\r\n    return (queue1->size == queue1->capacity);\r\n\r\n}\r\n\r\nint isEmpty(queue* queue1)\r\n\r\n{\r\n\r\n    return (queue1->size==0);\r\n\r\n}\r\n\r\n\r\n\r\nvoid enqueue(queue* queue1, node* item)\r\n\r\n{\r\n\r\n    if(isFull(queue1))\r\n\r\n        return ;\r\n\r\n    queue1->rear = (queue1->rear +1 )%queue1->capacity;\r\n\r\n    queue1->array[queue1->rear] = item;\r\n\r\n    queue1->size = queue1->size +1;\r\n\r\n\r\n\r\n}\r\n\r\n\r\n\r\nnode dequeue(queue* queue1)\r\n\r\n{\r\n\r\n    node* item = queue1->array[queue1->front];\r\n\r\n    queue1->front = (queue1->front +1)%queue1->capacity;\r\n\r\n    queue1->size = queue1->size -1;\r\n\r\n    return *item;\r\n\r\n}\r\n\r\n\r\n\r\nnode* front(queue* queue1)\r\n\r\n{\r\n\r\n    return queue1->array[queue1->front];\r\n\r\n}\r\n\r\n\r\n\r\nnode* rear(queue * queue1)\r\n\r\n{\r\n\r\n    return queue1->array[queue1->rear];\r\n\r\n}\r\n\r\nnode *createNode(ll value)\r\n\r\n{\r\n\r\n    node *t= (node *) malloc(sizeof(node));\r\n\r\n    t->value = value;\r\n\r\n    t->right = t->left = NULL;\r\n\r\n    return  t;\r\n\r\n}\r\n\r\nvoid deleteNode(node*t)\r\n\r\n{\r\n\r\n    free(t);\r\n\r\n}\r\n\r\n\r\n\r\nnode *replaceNegativeOne(node *root)\r\n\r\n{\r\n\r\n    if(root==NULL ||(root->value == -1 && root->left == NULL && root->right == NULL))\r\n\r\n        return NULL;\r\n\r\n    root->left = replaceNegativeOne(root->left);\r\n\r\n    root->right = replaceNegativeOne(root->right);\r\n\r\n    return root;\r\n\r\n}\r\n\r\n\r\n\r\nvoid deleteTree(node *node1)\r\n\r\n{\r\n\r\n    if(node1==NULL)\r\n\r\n        return;\r\n\r\n    deleteTree(node1->left);\r\n\r\n    deleteTree(node1->right);\r\n\r\n    free(node1);\r\n\r\n}\r\n\r\nnode *createTreeByLevelTree()\r\n\r\n{\r\n\r\n    ll n,m;\r\n\r\n    queue* queue1 = createQueue(100000);\r\n\r\n    node *root, *t;\r\n\r\n    root = NULL;\r\n\r\n    while(scanf(\"%lld\", &n))\r\n\r\n    {\r\n\r\n        if(isEmpty(queue1))\r\n\r\n        {\r\n\r\n            root= createNode(n);\r\n\r\n            enqueue(queue1,root);\r\n\r\n            continue;\r\n\r\n        }\r\n\r\n        scanf(\"%lld\", &m);\r\n\r\n        t = front(queue1);\r\n\r\n        dequeue(queue1);\r\n\r\n        t->left =createNode(n);\r\n\r\n        t->right=createNode(m);\r\n\r\n        if(t->left->value !=-1)\r\n\r\n            enqueue(queue1,t->left);\r\n\r\n        if(t->right->value !=-1)\r\n\r\n            enqueue(queue1,t->right);\r\n\r\n\r\n\r\n        if(isEmpty(queue1))\r\n\r\n            break;\r\n\r\n    }\r\n\r\n    return root;\r\n\r\n}\r\n\r\n\r\n\r\nvoid findMaxBendsUtil(node* node,\r\n\r\n                      char dir, int bends,\r\n\r\n                      int* maxBends, int soFar,\r\n\r\n                      int* len)\r\n\r\n{\r\n\r\n    \/\/ Base Case\r\n\r\n    if (node == NULL)\r\n\r\n        return;\r\n\r\n\r\n\r\n    \/\/ Leaf node\r\n\r\n    if (node->left == NULL && node->right == NULL) {\r\n\r\n        if (bends > *maxBends) {\r\n\r\n            *maxBends = bends;\r\n\r\n            *len = soFar;\r\n\r\n        }\r\n\r\n    }\r\n\r\n        \/\/ Recurring for both left and right child\r\n\r\n    else {\r\n\r\n        if (dir == 'l') {\r\n\r\n            findMaxBendsUtil(node->left, dir,\r\n\r\n                             bends, maxBends,\r\n\r\n                             soFar + 1, len);\r\n\r\n            findMaxBendsUtil(node->right, 'r',\r\n\r\n                             bends + 1, maxBends,\r\n\r\n                             soFar + 1, len);\r\n\r\n        }\r\n\r\n        else {\r\n\r\n            findMaxBendsUtil(node->right, dir,\r\n\r\n                             bends, maxBends,\r\n\r\n                             soFar + 1, len);\r\n\r\n            findMaxBendsUtil(node->left, 'l',\r\n\r\n                             bends + 1, maxBends,\r\n\r\n                             soFar + 1, len);\r\n\r\n        }\r\n\r\n    }\r\n\r\n}\r\n\r\n\r\n\r\nint findTurnCount(node* node)\r\n\r\n{\r\n\r\n    \/\/write your code here\r\n\r\n        if (node == NULL)\r\n\r\n        return 0;\r\n\r\n\r\n\r\n    int len = 0, bends = 0, maxBends = -1;\r\n\r\n\r\n\r\n    \/\/ Call for left subtree of the root\r\n\r\n    if (node->left)\r\n\r\n        findMaxBendsUtil(node->left, 'l',\r\n\r\n                         bends, &maxBends, 1, &len);\r\n\r\n\r\n\r\n    \/\/ Call for right subtree of the root\r\n\r\n    if (node->right)\r\n\r\n        findMaxBendsUtil(node->right, 'r', bends,\r\n\r\n                         &maxBends, 1, &len);\r\n\r\n\r\n\r\n    \/\/ Include the root node as well in the path length\r\n\r\n    len++;\r\n\r\n\r\n\r\n    return maxBends;\r\n\r\n}\r\n\r\nint main() {\r\n\r\n    node *root = NULL;\r\n\r\n    root = createTreeByLevelTree();\r\n\r\n    root = replaceNegativeOne(root);\r\n\r\n    printf(\"%d&#92;n\", findTurnCount(root));\r\n\r\n    deleteTree(root);\r\n\r\n    return 0;\r\n\r\n\r\n\r\n}\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane \" id=\"tabs_desc_1718_2\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"cpp\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n#define REP(i, n) for (i = 0; i < n; i++)\r\n\r\n#define pb(a) push_back(a)\r\n\r\n#define vi vector<long>\r\n\r\n#define ll long long\r\n\r\n#include <bits\/stdc++.h>\r\n\r\nusing namespace std;\r\n\r\nstruct node\r\n\r\n{\r\n\r\n    ll value;\r\n\r\n    node *left;\r\n\r\n    node *right;\r\n\r\n};\r\n\r\n\r\n\r\nnode *createNode(ll value)\r\n\r\n{\r\n\r\n    node *t = new node();\r\n\r\n    t->value = value;\r\n\r\n    t->right = t->left = NULL;\r\n\r\n    return t;\r\n\r\n}\r\n\r\nvoid deleteNode(node *t)\r\n\r\n{\r\n\r\n    delete t;\r\n\r\n}\r\n\r\nnode *replaceNegativeOne(node *root)\r\n\r\n{\r\n\r\n    if (root == NULL || (root->value == -1 && root->left == NULL && root->right == NULL))\r\n\r\n        return NULL;\r\n\r\n    root->left = replaceNegativeOne(root->left);\r\n\r\n    root->right = replaceNegativeOne(root->right);\r\n\r\n    return root;\r\n\r\n}\r\n\r\n\r\n\r\nnode *createTreeByLevelTree()\r\n\r\n{\r\n\r\n    ll n, m;\r\n\r\n    queue<node *> q;\r\n\r\n\r\n\r\n    node *root, *t;\r\n\r\n\r\n\r\n    root = NULL;\r\n\r\n\r\n\r\n    while (cin >> n)\r\n\r\n    {\r\n\r\n        if (q.empty())\r\n\r\n        {\r\n\r\n            root = createNode(n);\r\n\r\n            q.push(root);\r\n\r\n            continue;\r\n\r\n        }\r\n\r\n        cin >> m;\r\n\r\n\r\n\r\n        t = q.front();\r\n\r\n        q.pop();\r\n\r\n\r\n\r\n        t->left = createNode(n);\r\n\r\n        t->right = createNode(m);\r\n\r\n\r\n\r\n        if (t->left->value != -1)\r\n\r\n        {\r\n\r\n            q.push(t->left);\r\n\r\n        }\r\n\r\n\r\n\r\n        if (t->right->value != -1)\r\n\r\n        {\r\n\r\n            q.push(t->right);\r\n\r\n        }\r\n\r\n          if (q.empty())\r\n\r\n        {\r\n\r\n            break;\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n\r\n    return root;\r\n\r\n}\r\n\r\n\r\n\r\nvoid deleteTree(node *node)\r\n\r\n{\r\n\r\n    if (node == NULL)\r\n\r\n        return;\r\n\r\n\r\n\r\n    deleteTree(node->left);\r\n\r\n    deleteTree(node->right);\r\n\r\n    delete node;\r\n\r\n}\r\n\r\n\r\n\r\nvoid findMaxBendsUtil(node* node,\r\n\r\n                      char dir, int bends,\r\n\r\n                      int* maxBends, int soFar,\r\n\r\n                      int* len)\r\n\r\n{\r\n\r\n\r\n    if (node == NULL)\r\n\r\n        return;\r\n\r\n\r\n    if (node->left == NULL && node->right == NULL) {\r\n\r\n        if (bends > *maxBends) {\r\n\r\n            *maxBends = bends;\r\n\r\n            *len = soFar;\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n\r\n    else {\r\n\r\n        if (dir == 'l') {\r\n\r\n            findMaxBendsUtil(node->left, dir,\r\n\r\n                             bends, maxBends,\r\n\r\n                             soFar + 1, len);\r\n\r\n            findMaxBendsUtil(node->right, 'r',\r\n\r\n                             bends + 1, maxBends,\r\n\r\n                             soFar + 1, len);\r\n\r\n        }\r\n\r\n        else {\r\n\r\n            findMaxBendsUtil(node->right, dir,\r\n\r\n                             bends, maxBends,\r\n\r\n                             soFar + 1, len);\r\n\r\n            findMaxBendsUtil(node->left, 'l',\r\n\r\n                             bends + 1, maxBends,\r\n\r\n                             soFar + 1, len);\r\n\r\n        }\r\n\r\n    }\r\n\r\n}\r\n\r\n\r\n\r\nint findTurnCount(node* node)\r\n\r\n{\r\n\r\n    \/\/write your code here\r\n\r\n        if (node == NULL)\r\n\r\n        return 0;\r\n\r\n\r\n\r\n    int len = 0, bends = 0, maxBends = -1;\r\n\r\n\r\n\r\n    \/\/ Call for left subtree of the root\r\n\r\n    if (node->left)\r\n\r\n        findMaxBendsUtil(node->left, 'l',\r\n\r\n                         bends, &maxBends, 1, &len);\r\n\r\n\r\n\r\n    \/\/ Call for right subtree of the root\r\n\r\n    if (node->right)\r\n\r\n        findMaxBendsUtil(node->right, 'r', bends,\r\n\r\n                         &maxBends, 1, &len);\r\n\r\n\r\n\r\n\r\n\r\n    len++;\r\n\r\n    return maxBends;\r\n\r\n}\r\n\r\nint main()\r\n\r\n{\r\n\r\n    node *root = NULL;\r\n\r\n    root = createTreeByLevelTree();\r\n\r\n    root = replaceNegativeOne(root);\r\n\r\n    cout<<findTurnCount(root)<<endl;\r\n\r\n    deleteTree(root);\r\n\r\n    return 0;\r\n\r\n}\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t <\/div>\r\n\t\t\t\t\t \r\n\t\t\t\t <\/div>\r\n <script>\r\n\t\tjQuery(function () {\r\n\t\t\tjQuery('#myTab_1718 a:first').tab('show')\r\n\t\t});\r\n\t\t\r\n\t\t\t\tjQuery(function(){\r\n\t\t\tvar b=\"fadeIn\";\r\n\t\t\tvar c;\r\n\t\t\tvar a;\r\n\t\t\td(jQuery(\"#myTab_1718 a\"),jQuery(\"#tab-content_1718\"));function d(e,f,g){\r\n\t\t\t\te.click(function(i){\r\n\t\t\t\t\ti.preventDefault();\r\n\t\t\t\t\tjQuery(this).tab(\"show\");\r\n\t\t\t\t\tvar h=jQuery(this).data(\"easein\");\r\n\t\t\t\t\tif(c){c.removeClass(a);}\r\n\t\t\t\t\tif(h){f.find(\"div.active\").addClass(\"animated \"+h);a=h;}\r\n\t\t\t\t\telse{if(g){f.find(\"div.active\").addClass(\"animated \"+g);a=g;}else{f.find(\"div.active\").addClass(\"animated \"+b);a=b;}}c=f.find(\"div.active\");\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\r\n\t\tfunction do_resize(){\r\n\r\n\t\t\tvar width=jQuery( '.tab-content .tab-pane iframe' ).width();\r\n\t\t\tvar height=jQuery( '.tab-content .tab-pane iframe' ).height();\r\n\r\n\t\t\tvar toggleSize = true;\r\n\t\t\tjQuery('iframe').animate({\r\n\t\t\t    width: toggleSize ? width : 640,\r\n\t\t\t    height: toggleSize ? height : 360\r\n\t\t\t  }, 250);\r\n\r\n\t\t\t  toggleSize = !toggleSize;\r\n\t\t}\r\n\r\n\r\n\t<\/script>\r\n\t\t\t\t\r\n\t\t\t<br \/>\n[forminator_quiz id=&quot;1721&quot;]<\/p>\n<p>This article tried to discuss DFS , Recursion. Hope this blog helps you understand and solve the problem. To practice more problems on DFS , Recursion you can check out <a href=\"#\"><\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Concepts Used DFS , Recursion Difficulty Level Hard Problem Statement : Given a binary tree, find the path length having maximum number of bends. Solution Approach : Introduction : Bend indicates switching from left to right or vice versa while traversing in the tree. For example, consider below paths (L means moving leftwards, R means [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[112],"tags":[],"class_list":["post-1716","post","type-post","status-publish","format-standard","hentry","category-trees-interview-questions"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Trees Interview Questions | Maximum Turns | Prepbytes<\/title>\n<meta name=\"description\" content=\"Given a Binary Tree, Find the Path Length Having Maximum Number of Bends.bend Indicates Switching from Left to Right or Vice Versa While Traversing in the Tree.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/prepbytes.com\/blog\/maximum-turns\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Trees Interview Questions | Maximum Turns | Prepbytes\" \/>\n<meta property=\"og:description\" content=\"Given a Binary Tree, Find the Path Length Having Maximum Number of Bends.bend Indicates Switching from Left to Right or Vice Versa While Traversing in the Tree.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/prepbytes.com\/blog\/maximum-turns\/\" \/>\n<meta property=\"og:site_name\" content=\"PrepBytes Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prepbytes0211\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-11T11:52:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-23T23:43:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645528024158-Article_396.png\" \/>\n<meta name=\"author\" content=\"Prepbytes\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Prepbytes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/prepbytes.com\/blog\/maximum-turns\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/maximum-turns\/\"},\"author\":{\"name\":\"Prepbytes\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\"},\"headline\":\"Maximum Turns\",\"datePublished\":\"2020-06-11T11:52:47+00:00\",\"dateModified\":\"2022-03-23T23:43:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/maximum-turns\/\"},\"wordCount\":221,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/maximum-turns\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645528024158-Article_396.png\",\"articleSection\":[\"Trees Interview Questions\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/prepbytes.com\/blog\/maximum-turns\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/prepbytes.com\/blog\/maximum-turns\/\",\"url\":\"https:\/\/prepbytes.com\/blog\/maximum-turns\/\",\"name\":\"Trees Interview Questions | Maximum Turns | Prepbytes\",\"isPartOf\":{\"@id\":\"http:\/\/43.205.93.38\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/maximum-turns\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/maximum-turns\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645528024158-Article_396.png\",\"datePublished\":\"2020-06-11T11:52:47+00:00\",\"dateModified\":\"2022-03-23T23:43:56+00:00\",\"description\":\"Given a Binary Tree, Find the Path Length Having Maximum Number of Bends.bend Indicates Switching from Left to Right or Vice Versa While Traversing in the Tree.\",\"breadcrumb\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/maximum-turns\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/prepbytes.com\/blog\/maximum-turns\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prepbytes.com\/blog\/maximum-turns\/#primaryimage\",\"url\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645528024158-Article_396.png\",\"contentUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645528024158-Article_396.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/prepbytes.com\/blog\/maximum-turns\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/43.205.93.38\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Trees Interview Questions\",\"item\":\"https:\/\/prepbytes.com\/blog\/category\/trees-interview-questions\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Maximum Turns\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/43.205.93.38\/#website\",\"url\":\"http:\/\/43.205.93.38\/\",\"name\":\"PrepBytes Blog\",\"description\":\"ONE-STOP RESOURCE FOR EVERYTHING RELATED TO CODING\",\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/43.205.93.38\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"http:\/\/43.205.93.38\/#organization\",\"name\":\"Prepbytes\",\"url\":\"http:\/\/43.205.93.38\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp\",\"contentUrl\":\"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp\",\"width\":160,\"height\":160,\"caption\":\"Prepbytes\"},\"image\":{\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/prepbytes0211\/\",\"https:\/\/www.instagram.com\/prepbytes\/\",\"https:\/\/www.linkedin.com\/company\/prepbytes\/\",\"https:\/\/www.youtube.com\/channel\/UC0xGnHDrjUM1pDEK2Ka5imA\"]},{\"@type\":\"Person\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\",\"name\":\"Prepbytes\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g\",\"caption\":\"Prepbytes\"},\"url\":\"https:\/\/prepbytes.com\/blog\/author\/gourav-jaincollegedekho-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Trees Interview Questions | Maximum Turns | Prepbytes","description":"Given a Binary Tree, Find the Path Length Having Maximum Number of Bends.bend Indicates Switching from Left to Right or Vice Versa While Traversing in the Tree.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/prepbytes.com\/blog\/maximum-turns\/","og_locale":"en_US","og_type":"article","og_title":"Trees Interview Questions | Maximum Turns | Prepbytes","og_description":"Given a Binary Tree, Find the Path Length Having Maximum Number of Bends.bend Indicates Switching from Left to Right or Vice Versa While Traversing in the Tree.","og_url":"https:\/\/prepbytes.com\/blog\/maximum-turns\/","og_site_name":"PrepBytes Blog","article_publisher":"https:\/\/www.facebook.com\/prepbytes0211\/","article_published_time":"2020-06-11T11:52:47+00:00","article_modified_time":"2022-03-23T23:43:56+00:00","og_image":[{"url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645528024158-Article_396.png","type":"","width":"","height":""}],"author":"Prepbytes","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Prepbytes","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/prepbytes.com\/blog\/maximum-turns\/#article","isPartOf":{"@id":"https:\/\/prepbytes.com\/blog\/maximum-turns\/"},"author":{"name":"Prepbytes","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e"},"headline":"Maximum Turns","datePublished":"2020-06-11T11:52:47+00:00","dateModified":"2022-03-23T23:43:56+00:00","mainEntityOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/maximum-turns\/"},"wordCount":221,"commentCount":0,"publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/maximum-turns\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645528024158-Article_396.png","articleSection":["Trees Interview Questions"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/prepbytes.com\/blog\/maximum-turns\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/prepbytes.com\/blog\/maximum-turns\/","url":"https:\/\/prepbytes.com\/blog\/maximum-turns\/","name":"Trees Interview Questions | Maximum Turns | Prepbytes","isPartOf":{"@id":"http:\/\/43.205.93.38\/#website"},"primaryImageOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/maximum-turns\/#primaryimage"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/maximum-turns\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645528024158-Article_396.png","datePublished":"2020-06-11T11:52:47+00:00","dateModified":"2022-03-23T23:43:56+00:00","description":"Given a Binary Tree, Find the Path Length Having Maximum Number of Bends.bend Indicates Switching from Left to Right or Vice Versa While Traversing in the Tree.","breadcrumb":{"@id":"https:\/\/prepbytes.com\/blog\/maximum-turns\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/prepbytes.com\/blog\/maximum-turns\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prepbytes.com\/blog\/maximum-turns\/#primaryimage","url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645528024158-Article_396.png","contentUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645528024158-Article_396.png"},{"@type":"BreadcrumbList","@id":"https:\/\/prepbytes.com\/blog\/maximum-turns\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/43.205.93.38\/"},{"@type":"ListItem","position":2,"name":"Trees Interview Questions","item":"https:\/\/prepbytes.com\/blog\/category\/trees-interview-questions\/"},{"@type":"ListItem","position":3,"name":"Maximum Turns"}]},{"@type":"WebSite","@id":"http:\/\/43.205.93.38\/#website","url":"http:\/\/43.205.93.38\/","name":"PrepBytes Blog","description":"ONE-STOP RESOURCE FOR EVERYTHING RELATED TO CODING","publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/43.205.93.38\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"http:\/\/43.205.93.38\/#organization","name":"Prepbytes","url":"http:\/\/43.205.93.38\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/","url":"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp","contentUrl":"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp","width":160,"height":160,"caption":"Prepbytes"},"image":{"@id":"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/prepbytes0211\/","https:\/\/www.instagram.com\/prepbytes\/","https:\/\/www.linkedin.com\/company\/prepbytes\/","https:\/\/www.youtube.com\/channel\/UC0xGnHDrjUM1pDEK2Ka5imA"]},{"@type":"Person","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e","name":"Prepbytes","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g","caption":"Prepbytes"},"url":"https:\/\/prepbytes.com\/blog\/author\/gourav-jaincollegedekho-com\/"}]}},"_links":{"self":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/1716","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/comments?post=1716"}],"version-history":[{"count":5,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/1716\/revisions"}],"predecessor-version":[{"id":8207,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/1716\/revisions\/8207"}],"wp:attachment":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/media?parent=1716"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/categories?post=1716"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/tags?post=1716"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}