private void PostOrder(BinaryThreadTreeNode <T> node, Action <BinaryThreadTreeNode <T> > visitNode) { if (!node.IsLeftThread) { visitNode(node.LeftChild as BinaryThreadTreeNode <T>); } if (!node.IsRightThread) { visitNode(node.RightChild as BinaryThreadTreeNode <T>); } visitNode(node); }
public void Threaded(TraversalType t) { BinaryThreadTreeNode <T> preNode = null; if (t == TraversalType.PreOrder) { PreOrder(Root as BinaryThreadTreeNode <T>, (BinaryThreadTreeNode <T> node) => { if (preNode != null && preNode.IsRightThread) { preNode.RightChild = node; } if (node.LeftChild == null) { node.IsLeftThread = true; node.LeftChild = preNode; } if (node.RightChild == null) { node.IsRightThread = true; } preNode = node; }); } else if (t == TraversalType.MidOrder) { MidOrder(Root as BinaryThreadTreeNode <T>, (BinaryThreadTreeNode <T> node) => { if (preNode != null && preNode.IsRightThread) { preNode.RightChild = node; } if (node.LeftChild == null) { node.IsLeftThread = true; node.LeftChild = preNode; } if (node.RightChild == null) { node.IsRightThread = true; } preNode = node; }); } else if (t == TraversalType.PostOrder) { PostOrder(Root as BinaryThreadTreeNode <T>, (BinaryThreadTreeNode <T> node) => { if (preNode != null && preNode.IsRightThread) { preNode.RightChild = node; } if (node.LeftChild == null) { node.IsLeftThread = true; node.LeftChild = preNode; } if (node.RightChild == null) { node.IsRightThread = true; } preNode = node; }); } }