树的递归和非反复遍历

0 java data-structures

通过在二叉搜索树上执行递归和非递归前序遍历,我得不到相同的结果

递归方法

public static void preorder(TreeNode root) {
    if (root == null)
        return;
    else {
        System.out.print(root);
        inorder(root.getLeftPtr());
        inorder(root.getRightPtr());
    }
}
Run Code Online (Sandbox Code Playgroud)

非递归方法

public static void preorder2(TreeNode root){
    if(root==null)return;
    Stack<TreeNode> stack=new Stack<TreeNode>();

    while(true){
        while(root!=null){
            //process current Node
            System.out.print(root);
            stack.push(root);
            root=root.getLeftPtr();
        }
        if(stack.isEmpty())break;
        root=stack.pop();
        root=root.getRightPtr();
    }

}
Run Code Online (Sandbox Code Playgroud)

结果

      recursive method-> 10-> 5-> 6-> 8-> 12-> 15-> 20
  non recursive method-> 10-> 6-> 5-> 8-> 15-> 12-> 20
Run Code Online (Sandbox Code Playgroud)

Dee*_*epu 9

我认为你的递归方法应该是这样的,

public static void preorder(TreeNode root) {
    if (root == null)
        return;
    else {
        System.out.print(root);
        preorder(root.getLeftPtr());
        preorder(root.getRightPtr());
    }
}
Run Code Online (Sandbox Code Playgroud)