红黑树中插入的节点出现错误的颜色

时间:2017-10-15 05:59:51

标签: java red-black-tree

当root.right和root的颜色为红色时,我想将根节点的颜色更改为黑色。 现在在这个代码中我首先插入5所以这个根的颜色将是黑色。然后我插入6然后这个节点的颜色将是红色然后我插入7然后该节点的颜色将是红色。所以现在这个节点和前一个节点有红色所以这里我需要改变包含data = 6

的前一个节点的颜色
package redblack;

public class Redblack {
public enum Color {
   red,black,blue
};
   static class Node{
      int data;
      Color color;
      Node right;
      Node parent;
      Node(int data){
          color=Color.black;
          this.data=data;
          right=null;
          parent =null;
      }
  }  
        static Node insertion(Node root,int data){
      if(root==null){
          Node root1=new Node(data);
          return root1;
      }
      if(root.data<data){
      root.right=insertion(root.right,data);
      root.right.parent=root;
      root.right.color=Color.red;
      if(root.parent!=null)
      root.color=Color.black; // Whats wrong here?
      }
      return root;
  }
        public static void main(String[] args) {
  Node root=new Node(5);
  root=insertion(root,6);
  root=insertion(root,7);
    System.out.println(root.right.color); //Getting red color but i want black color here
 }

}

2 个答案:

答案 0 :(得分:0)

您在此处将颜色设置为红色:

System.out.println(root.right.color);

所以这一行必须打印红色而不是黑色:

root.right

请注意,即使您将内部调用内的insertion颜色设置为红色insertion,当它返回到外部root.right=insertion(root.right,data); ... root.right.color=Color.red; 时,您也会这样做:

root.right

所以,你覆盖了你设置的任何颜色if ($(this).attr("value") == "button-three") { var skoring = getRadioVal(document.getElementById('mentodeNegasi'),'negasi') $.ajax({ data: { metodeSkoring: skoring }, type: 'POST', url: '/evaluasiModel' }) } 总是红色。

答案 1 :(得分:0)

你没有为root.parent分配任何值,所以它总是为null你在这段代码root=insertion(root,7);中你删除了前一个权利并重新插入一个红色你应该替换这个{ {1}} root=insertion(root,7);