在二元树中找出和为某一值的所有路径

/// <summary>
    /// 找出二叉树中和为某一值的所有路径
    /// </summary>
    class BinarySearch
    {
        public static void Do()
        {
            int[] tree = { 10,5,8,4,7,1};
            int currentSum=0;
            PostOrderSerach(tree, 0, new Stack<int>(), ref currentSum, 19);
        }

        public static void PostOrderSerach(int[] tree, int cur, Stack<int> pathStack, ref int currentSum, int expectedSum)
        {
            pathStack.Push(tree[cur]); //不会重复遍历已经访问过的节点
            currentSum += tree[cur];
            if (currentSum == expectedSum)
            {
                DisplayPath(pathStack, "路径");
            }
            //递归遍历左子树
            int left = (cur + 1) * 2 - 1;
            if (left < tree.Length)
            {
                PostOrderSerach(tree, left, pathStack, ref currentSum, expectedSum);
            }
            //递归遍历右子树
            int right = (cur + 1) * 2;
            if (right < tree.Length)
            {
                PostOrderSerach(tree, right, pathStack, ref currentSum, expectedSum);
            }
            //在后续遍历的位置退栈
            int tmp= pathStack.Pop();
            currentSum -= tmp;
        }

        public static void DisplayPath(Stack<int> path,string title)
        {
            Console.Write(title + ":");
            foreach (var item in path.Reverse<int>())
            {
                Console.Write(item + ",");
            }
            Console.WriteLine();
        }
    }

  

原文地址:https://www.cnblogs.com/wuMing-dj/p/3380937.html