Esempio n. 1
0
        internal ThreadedBinaryTreeNode <T> BuildThreadedTree(BinaryTreeNodeBase <T> root, ThreadedBinaryTreeNode <T> nodeParent, ThreadedBinaryTreeNode <T> nodeRecentVisited)
        {
            if (root == null)
            {
                return(null);
            }
            bool isLeftThreaded              = (root.Left == null);
            bool isRightThreaded             = (root.Right == null);
            ThreadedBinaryTreeNode <T> node  = new ThreadedBinaryTreeNode <T>(root.Value, isLeftThreaded, null, isRightThreaded, null);
            ThreadedBinaryTreeNode <T> left  = BuildThreadedTree(root.Left, node, nodeRecentVisited);
            ThreadedBinaryTreeNode <T> right = BuildThreadedTree(root.Right, nodeParent, node);

            if (isLeftThreaded)
            {
                left = nodeRecentVisited;
            }
            if (isRightThreaded)
            {
                right = nodeParent;
            }
            node.AddChild(left);
            node.AddChild(right);
            return(node);
        }