二分探索木で再帰的および非再帰的なプレオーダートラバーサルを実行しても同じ結果が得られません
再帰的方法
public static void preorder(TreeNode root) {
if (root == null)
return;
else {
System.out.print(root);
inorder(root.getLeftPtr());
inorder(root.getRightPtr());
}
}
非再帰的方法
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();
}
}
結果
recursive method-> 10-> 5-> 6-> 8-> 12-> 15-> 20
non recursive method-> 10-> 6-> 5-> 8-> 15-> 12-> 20