迭代预订树遍历的最常见解决方案如下: -
1) Create an empty stack nodeStack and push root node to stack.
2) Do following while nodeStack is not empty.
….a) Pop an item from stack and print it.
….b) Push right child of popped item to stack ….c) Push left child of popped item to stack
然而,我从将递归解决方案转换为迭代的角度思考并提出以下代码: -
private static void preorder(Node root) {
Stack<Node> s = new Stack<Node>();
if(root != null){
System.out.println(root.data);
s.push(root);
}
while(!s.isEmpty()){
if(root.left != null){
root = root.left;
System.out.println(root.data);
s.push(root);
}
else{
Node p = s.pop();
if(p.right != null){
root = p.right;
System.out.println(root.data);
s.push(root);
}
}
}
}
我想知道哪个是更好的解决方案,为什么? 如果我们通过递归解决方案,第二个实现看起来更好的解决方案,如果我错了,请纠正我。