public void inOrder_Stack(TreeNode root) {
        Stack<TreeNode> stack = new Stack<TreeNode>();
        while (root != null) {
            // 不断遍历左节点, 将遍历左支过程中遇到的 右 中 节点存储
            while (root != null) {
                if (root.right != null)
                    stack.push(root.right); // 右
                stack.push(root); // 中
                root = root.left; // 左 // 此时遍历到最left的叶子节点
            }

            // 展示左节点和中节点
            root = stack.pop(); // 此时stack中存储的是最left节点
            while (!stack.empty() && root.right == null) { // 处理无右节点单支情况
                visit(root);
                root = stack.pop();
            }
            visit(root);

            // 继续轮询 static中存储的右节点
            if (!stack.empty())
                root = stack.pop();
            else
                root = null;
        }
    }