你会如何检测二叉树中的循环

时间:2016-04-21 05:06:14

标签: binary-tree

您如何检测二叉树中的循环。作为下图中的示例,节点5是非法节点。一种方法是找到边和节点的数量。边缘应为n -1。

enter image description here

2 个答案:

答案 0 :(得分:1)

我们可以进行任何类型的遍历,例如预序,后序或有序,并检查是否有任何节点按遍历顺序出现多次。如果是,则存在一个循环。

答案 1 :(得分:0)

您可以遍历树并检查每个父项是否包含两个或更少的子项,否则它不是二叉树。

递归方式:

flag = true;
traverse(Node node){
    if(node == null || !flag)
        return;
    //Check for more than two children, if yes not binary tree, exit
    if(node.getChilds().length > 2){
        flag = false;
        return;
    }
    // Go through each nodes
    for(Node child : node.getChilds()) {
        traverse(child);
    }
}

注意:最好使用非递归方式,一旦找到两个以上的孩子就可以退出循环。