public static Tuple <NodeX, NodeX> ConvertTreeToDoubleLinkedList(TreeNode node) { if (node.left == null && node.right == null) { NodeX node1 = new NodeX(null, null, node.value); return(Tuple.Create(node1, node1)); } if (node.left != null && node.right == null) { var tuple = ConvertTreeToDoubleLinkedList(node.left); NodeX root = new NodeX(null, null, node.value); root.prev = tuple.Item2; tuple.Item2.next = root; return(Tuple.Create(tuple.Item1, root)); } if (node.left == null && node.right != null) { var tuple = ConvertTreeToDoubleLinkedList(node.right); NodeX root = new NodeX(null, null, node.value); root.next = tuple.Item1; tuple.Item1.prev = root; return(Tuple.Create(root, tuple.Item2)); } var leftTuple = ConvertTreeToDoubleLinkedList(node.left); var rightTuple = ConvertTreeToDoubleLinkedList(node.right); NodeX rootX = new NodeX(rightTuple.Item1, leftTuple.Item2, node.value); rightTuple.Item1.prev = rootX; leftTuple.Item2.next = rootX; return(Tuple.Create(leftTuple.Item1, rightTuple.Item2)); }
public NodeX(NodeX next, NodeX prev, int value) { this.next = next; this.prev = prev; this.value = value; }