public LJTreeNode(ITreeNode value, LJTreeNode par, LJTreeNode left, LJTreeNode right) { this.data = value; this.parent = par; this.left = left; this.right = right; }
public LJTreeNode GetTreeNode(ITreeNode item, LJTreeNode pptr, LJTreeNode lptr, LJTreeNode rptr) { LJTreeNode p = new LJTreeNode(item, pptr, lptr, rptr); return(p); }
public void ClearList() { DeleteTree(root); root = null; current = null; size = 0; }
public LJTreeNode FindNode(ITreeNode item, LJTreeNode parent) { LJTreeNode t = parent; if (parent == null) { t = root; } while (t != null) { int comp = item.CompareTo(t.data); if (comp == 0) { break; } else { if (item.IsChildOf(t.data)) { t = t.Left; } else if (comp > 0) { t = t.Right; } else { t = null; } } } return(t); }
private void DeleteTree(LJTreeNode t) { if (t != null) { DeleteTree(t.Left); DeleteTree(t.Right); FreeTreeNode(t); size--; } }
public LJTreeNode Insert(ITreeNode item) { LJTreeNode t = root; LJTreeNode parent = null; LJTreeNode right = null; LJTreeNode newNode = null; //用<表示兄,用>表示弟,用^表示孩子 // terminate on on empty subtree while (t != null) { parent = t; if (item.IsChildOf(t.data)) { parent = t; right = null; t = t.Left; } else if (item.CompareTo(t.data) < 0) { parent = t.Parent; right = t; break; } else { parent = t; right = null; t = t.Right; } } newNode = GetTreeNode(item, parent, null, right); if (parent == null) { root = newNode; } else if (item.IsChildOf(parent.data)) { parent.Left = newNode; } else { parent.Right = newNode; } if (right != null) { right.Parent = newNode; } current = newNode; size++; return(newNode); }
public LJTreeNode GetPrevSib(LJTreeNode node) { LJTreeNode pptr = node.Parent; if (pptr != null) { if (node.data.IsChildOf(pptr.data)) { return(null); } } return(pptr); }
public LJTreeNode GetParent(LJTreeNode node) { LJTreeNode pptr = node.Parent; while (pptr != null) { if (node.data.IsChildOf(pptr.data)) { break; } pptr = pptr.Parent; } return(pptr); }
public int Find(ref ITreeNode item) { LJTreeNode parent = null; current = FindNode(item, parent); if (current != null) { item = current.data; return(1); } else { return(0); } }
private void FreeTreeNode(LJTreeNode p) { p.Dispose(); }
public LJTreeNode GetChild(LJTreeNode node) { return(node.Left); }
public LJTreeNode GetNextSib(LJTreeNode node) { return(node.Right); }