二叉树中任意两个叶节点之间的深度是否大于1

时间:2017-10-03 00:13:35

标签: java algorithm binary-search-tree

我一直在研究这个编码问题,并且已经能够成功地将每个叶节点的深度变为哈希集。我想要做的是确定在将该深度添加到散列集之前,叶节点的深度差是否大于1。我不想将所有叶节点放在哈希集中,并使用两个for循环来检查深度是否大于1。在下面的代码中,int变量count表示深度。

问题是我的代码总是返回true。代码中出现问题,其中检查每个叶节点的深度/计数差异。代码如下。我试图将此方法保持在O(n)时间,并避免使用O(n ^ 2)。

此树中四个叶节点的深度为:3,2,2,5

import java.util.*;
public class cakeEightWeekly {
 static int count = 0;
 public static class Node {
  public int value;
  public Node leftChild;
  public Node rightChild;
  public Node(int value) {
   this.value = value;
  }
  public void setLeft(Node leftValue) {
   this.leftChild = leftValue;
  }
  public void setRight(Node rightValue) {
   this.rightChild = rightValue;
  }
  public Node getRight() {
   return rightChild;
  }
  public Node getLeft() {
   return leftChild;
  }
 }
 public static boolean isBalanced(Node root) {
  HashSet < Integer > hset = new HashSet < Integer > ();
  if (root != null) {
   count++;
   isBalanced(root.getLeft());
   isBalanced(root.getRight());
   count--;
   if (root.getLeft() == null && root.getRight() == null) {
    if (!hset.isEmpty()) {
     for (int x: hset) {
      if ((x - count) < 0) {
       int sum = count - x;
       if (sum > 1) {
        return false;
       }
      } else if ((x - count) > 1) {
       return false;
      }
     }
     hset.add(count);
    } else {
     hset.add(count);
    }
   }
  }
  return true;
 }
 public static void main(String[] args) {
  Node One = new Node(1);
  Node Two = new Node(2);
  Node Three = new Node(3);
  Node Four = new Node(4);
  Node Five = new Node(5);
  Node Six = new Node(6);
  Node Seven = new Node(7);
  Node Eight = new Node(8);
  Node Nine = new Node(9);
  Node Ten = new Node(10);
  Node Eleven = new Node(11);
  Five.setLeft(Three);
  Five.setRight(Seven);
  Three.setLeft(Two);
  Three.setRight(Four);
  Two.setLeft(One);
  Seven.setLeft(Six);
  Seven.setRight(Eight);
  Eight.setRight(Nine);
  Nine.setRight(Ten);
  Ten.setRight(Eleven);
  System.out.print(isBalanced(Five));
 }
}

0 个答案:

没有答案