递归树没有给出正确的输出

问题描述

我有一个树对象,它有两个孩子(子树)5 和 6。5 有另一个孩子 7,6 有另一个孩子 8。我想找出树中是否包含任何特定的子树。例如,我编写了一个函数,如果树中存在子树 8,则该函数将返回。

var tree = {
  value: undefined,children: [{
    value: 5,children: [{
      value: 7,children: []
    }]
  },{
    value: 6,children: [{
      value: 8,children: []
    }]
  }]
};

我的递归函数

  var contains = function (node,target) {
    
    for (var i = 0; i < node.children.length; i++) {
      if (node.children[i].value === target) {
        return true;
      } else {
        return contains(node.children[i],target);
      }
      return false;

    }
  };
contains(tree,8);

如我们所见,树中存在 8,但我的函数返回 false。如果我想检查 5 或 7 是否存在,我的函数返回 true,但如果我调用它来搜索 6 或 8,它返回 undefined。我尝试使用调试器,它显示我的代码没有增加 for 循环来检查5 之后的下一个孩子。任何帮助将不胜感激。提前致谢。

解决方法

我已经改变了你的一些代码,所以它不会过早地return

var tree = {
  value: undefined,children: [{
    value: 5,children: [{
      value: 7,children: []
    }]
  },{
    value: 6,children: [{
      value: 8,children: []
    }]
  }]
};

var contains = function (node,target) {
    
    for (var i = 0; i < node.children.length; i++) {
      if (node.children[i].value === target) {
        return true;
      } else {
        if(contains(node.children[i],target)) return true;
      }
     

    }
     return false;
};

console.log(contains(tree,8));