Skip to main content
Code Review

Return to Answer

replaced http://stackoverflow.com/ with https://stackoverflow.com/
Source Link
  • The first four lines are dominated by getChildren(currentValue.input). If the length of currentValue.input - the length of the children - is proportional to n, then it has a runtime complexity of O(n 2).
  • Then it calls getValueForLevel(children.left, k-1). It is easy to construct inputs which maximize the length of children.left such as "4(3(2(1))))" without right children. For this input, in each iteration, the length of children.left is reduced by 3.
  • The final call to JSON.parse is in O(n) is in O(n).
  • The first four lines are dominated by getChildren(currentValue.input). If the length of currentValue.input - the length of the children - is proportional to n, then it has a runtime complexity of O(n 2).
  • Then it calls getValueForLevel(children.left, k-1). It is easy to construct inputs which maximize the length of children.left such as "4(3(2(1))))" without right children. For this input, in each iteration, the length of children.left is reduced by 3.
  • The final call to JSON.parse is in O(n).
  • The first four lines are dominated by getChildren(currentValue.input). If the length of currentValue.input - the length of the children - is proportional to n, then it has a runtime complexity of O(n 2).
  • Then it calls getValueForLevel(children.left, k-1). It is easy to construct inputs which maximize the length of children.left such as "4(3(2(1))))" without right children. For this input, in each iteration, the length of children.left is reduced by 3.
  • The final call to JSON.parse is in O(n).
Fixed `parseNode` sample code
Source Link
le_m
  • 1.9k
  • 10
  • 15
// Split node 'a(b)(c)' into value 'a' and children '(b)(c)':
function parseNode(node) {
 let split = Math.min(inputnode.indexOf('('), inputnode.indexOf(')'));
 if (split < 0) indexsplit = inputnode.length;
 return {
 value: inputnode.substrslice(0, split),
 children: inputnode.slice(split)
 };
}
// Split node 'a(b)(c)' into value 'a' and children '(b)(c)':
function parseNode(node) {
 let split = Math.min(input.indexOf('('), input.indexOf(')'));
 if (split < 0) index = input.length;
 return {
 value: input.substr(0, split),
 children: input.slice(split)
 };
}
// Split node 'a(b)(c)' into value 'a' and children '(b)(c)':
function parseNode(node) {
 let split = Math.min(node.indexOf('('), node.indexOf(')'));
 if (split < 0) split = node.length;
 return {
 value: node.slice(0, split),
 children: node.slice(split)
 };
}
Simplified alternative code
Source Link
le_m
  • 1.9k
  • 10
  • 15
// Sum integer tree nodes at given level: 
function sumTreeLevel(tree, level) {
 let tokens = tree.match(/(\(|[0-9]+|\))/g);
 let nesting = -1;
 let sum = 0;
 for (let token of tokens) {
 if (token === '(') {
 nesting++;level--;
 } else if (token === ')') {
 nesting--;level++;
 } else if (nestinglevel === level-1) {
 sum += +token;
 }
 }
 return sum;
}
// Example:
console.log(sumTreeLevel("(10(5(3)(12))(14(11)(17)))", 2)); // 43
// Sum integer tree nodes at given level: 
function sumTreeLevel(tree, level) {
 let tokens = tree.match(/(\(|[0-9]+|\))/g);
 let nesting = -1;
 let sum = 0;
 for (let token of tokens) {
 if (token === '(') {
 nesting++;
 } else if (token === ')') {
 nesting--;
 } else if (nesting === level) {
 sum += +token;
 }
 }
 return sum;
}
// Example:
console.log(sumTreeLevel("(10(5(3)(12))(14(11)(17)))", 2)); // 43
// Sum integer tree nodes at given level: 
function sumTreeLevel(tree, level) {
 let tokens = tree.match(/(\(|[0-9]+|\))/g);
 let sum = 0;
 for (let token of tokens) {
 if (token === '(') {
 level--;
 } else if (token === ')') {
 level++;
 } else if (level === -1) {
 sum += +token;
 }
 }
 return sum;
}
// Example:
console.log(sumTreeLevel("(10(5(3)(12))(14(11)(17)))", 2)); // 43
more details added to worst case runtime complexity
Source Link
le_m
  • 1.9k
  • 10
  • 15
Loading
Source Link
le_m
  • 1.9k
  • 10
  • 15
Loading
default

AltStyle によって変換されたページ (->オリジナル) /