Solution #1: The longest zig-zag path is the longest LRLRLR... or RLRLRL... in a tree where 'L' and 'R' stands for left and right children. Also, note that the longest zig-zag path doesn't necessarily starts from the root. Here is the recursive code,
int maxZigzag(struct node* root) { int lcount = 0; int rcount = 0; int max = 0; struct node* temp = root; if(root == NULL) return 0; while(1) { if(temp->left != NULL) { lcount++; temp = temp->left; } else break; if(temp->right != NULL) { lcount++; temp = temp->right; } else break; } while(1) { if(temp->right != NULL) { rcount++; temp = temp->right; } else break; if(temp->left != NULL) { rcount++; temp = temp->left; } else break; } max = MAX(lcount, rcount); max = MAX(max, maxZigzag(root->left)); max = MAX(max, maxZigzag(root->right)); return max; } int main() { struct node *root; insert(&root, 100); insert(&root, 50); insert(&root, 25); insert(&root, 40); insert(&root, 30); insert(&root, 35); insert(&root, 120); insert(&root, 110); insert(&root, 32); printf("maxZigzag = %d\n", maxZigzag(root)); return 0; }
1 comment:
In each of the inner while loops, will the second condition ever occur ?
Post a Comment