public BinTreeNodeExt BuildAVLTree(long[] elements, int count) { BinTreeNodeExt lastNode = null; if (count == 1) { lastNode = new BinTreeNodeExt(elements[0]); } return(lastNode); }
public BinTreeNodeExt GetCartesianTree(long[] elements, int count) { // last node is not root BinTreeNodeExt lastNode = null; if (count == 1) { lastNode = new BinTreeNodeExt(elements[0]); } else if (count > 1 && count < elements.Length) { long value = elements[count]; BinTreeNodeExt prevTree = GetCartesianTree(elements, count - 1); BinTreeNodeExt prevprevTree = null; BinTreeNodeExt newNode = new BinTreeNodeExt(elements[count]); // add the new node to tree while (null != prevTree && prevTree.Info > value) { prevprevTree = prevTree; prevTree = prevTree.Parent; } if (prevTree != null) { newNode.Right = prevTree.Right; prevTree.Right = newNode; newNode.Parent = prevTree; } else { // new node is the new root, and the rest go to left newNode.Left = prevprevTree; if (null != prevprevTree) { prevprevTree.Parent = newNode; } } if (null != newNode.Right) { ((BinTreeNodeExt)newNode.Right).Parent = newNode; } if (null != newNode.Left) { ((BinTreeNodeExt)newNode.Left).Parent = newNode; } } return(lastNode); }
public BinTreeNodeExt(long info, long left, long right, BinTreeNodeExt parent) : base(info, left, right) { Parent = parent; }
public BinTreeNodeExt(long info) : base(info) { Parent = null; }