Ejemplo n.º 1
0
        public void PostOrderTraverse(TreeNode node)
        {
            if (node == null) return;

            PostOrderTraverse(node.left);

            PostOrderTraverse(node.right);

            Console.Write(node.val + " ");
        }
Ejemplo n.º 2
0
        private TreeNode BuildTree(int[] preorder, int preLeftIdx, int preRightIdx, int[] inorder, int inLeftIdx, int inRightIdx)
        {
            TreeNode root = new TreeNode(preorder[preLeftIdx]);

            //find root index in inorder
            int rootOfIn = -1;
            for (int i = inLeftIdx; i <= inRightIdx; i++)
            {
                if (inorder[i] == root.val)
                {
                    rootOfIn = i;
                    break;
                }
            }

            //find left sub
            int noOfNodeInSubLeft = rootOfIn - inLeftIdx;
            if (noOfNodeInSubLeft == 0)
            {
                root.left = null;
            }
            else
            {

                root.left = BuildTree(preorder, preLeftIdx + 1, preLeftIdx + noOfNodeInSubLeft, inorder, inLeftIdx, inLeftIdx + noOfNodeInSubLeft - 1);
            }

            //find right sub
            int noOfNodeInSubRight = inRightIdx - rootOfIn;
            if (noOfNodeInSubRight == 0)
            {
                root.right = null;
            }
            else
            {

                root.right = BuildTree(preorder, preRightIdx - noOfNodeInSubRight + 1, preRightIdx, inorder, inRightIdx - noOfNodeInSubRight + 1, inRightIdx);
            }

            return root;
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            TreeNode root = new TreeNode(1);
            TreeNode n1 = new TreeNode(2);
            TreeNode n2 = new TreeNode(3);
            root.left = n1;
            root.right = n2;
            TreeNode n3 = new TreeNode(4);
            TreeNode n4 = new TreeNode(5);
            TreeNode n7 = new TreeNode(6);
            n1.left = n3;
            n1.right = n4;
            n2.left = n7;

            Program p = new Program();

            //p.PreOrderTraverse(root);
            //Console.WriteLine();
            //p.InOrderTraverse(root);
            //Console.WriteLine();
            //p.PostOrderTraverse(root);
            //Console.WriteLine();

            int[] preorder =
                {1,2,4,5,3,6 };

            int[] inorder =
                {4,2,5,1,6,3 };
                //{ 1, 2, 3, 4 };
            int[] postorder =
                { 4,5,2,6,3,1 };
                //{ 1, 4, 3, 2 };

            TreeNode preTree = p.BuildTree(preorder, inorder);
            p.PreOrderTraverse(preTree);

            Console.WriteLine();
            Console.ReadKey();
        }