bool isLeaf (Node* root) { if (root->left == NULL && root->right == NULL) { return true; } else return false; } bool isSumTree (Node* root) { if (root == NULL || isLeaf(root)) { return true; } if (isSumTree(root->left) && isSumTree(root->right)) { int leftSum = 0, rightSum = 0; if (isLeaf(root->left)) { leftSum = left->val; }else if (root->left == NULL) { leftSum = 0; }else { leftSum = root->left->val * 2; } if (isLeaf(root->right)) { rightSum = right->val; }else if (root->right == NULL) { rightSum = 0; }else { rightSum = root->right->val * 2; } return root->val == (rightSum + leftSum); } return false; }The algorithm would be the same if we want to turn a tree to a valid sum tree ------------------------------------------------ Q: Implement a Stack class with O(1) min function. A: use an extra stack to contain all min values, O(n) space, use (push 2 * value - min to stack) to optimize space to O(1)
Friday, January 17, 2014
## Other: Check if a given Binary Tree is SumTree, Stack implementation
Check for SumTree
No comments:
Post a Comment