c*r 发帖数: 9 | 1 我的最好解法要用两个stack。估计有更好的算法吧?
顺便问周末狂补coding的各位同仁好! |
f*********5 发帖数: 576 | 2 while(1)
{
if(current->left) { s.push(current);current=current->left;}
else if(current->right) { s.push(current);current=current->right;}
else {
while(1)
{
printf();
if (stack.IsEmpty()) return;
temp=stack.top();
if(temp->left==current&&temp->right)
{ current=temp->right; break;}
stack.pop();
current=temp;
}
}
}
【在 c*r 的大作中提到】 : 我的最好解法要用两个stack。估计有更好的算法吧? : 顺便问周末狂补coding的各位同仁好!
|
I**A 发帖数: 2345 | 3 不知道哪个更好理解,自己看吧
//POSTORDER traversal iteratively
public static void postOrderIteratively(BST mybst){
Stack nodestack = new Stack();
Node node = mybst.root;
Node prevnode = mybst.root;
//initialize the stack
while(node!=null){
nodestack.push(node);
node = node.left;
}
while( !nodestack.isEmpty()){
node = (Node)nodestack.pop();
//if this is the leaf node, then print the data o
【在 f*********5 的大作中提到】 : while(1) : { : if(current->left) { s.push(current);current=current->left;} : else if(current->right) { s.push(current);current=current->right;} : else { : while(1) : { : printf(); : if (stack.IsEmpty()) return; : temp=stack.top();
|
i***1 发帖数: 95 | 4 你这个好理解。上面那个,没看懂。。。
不过,楼主用两个stack的方法,应该是最容易理解的。
【在 I**A 的大作中提到】 : 不知道哪个更好理解,自己看吧 : //POSTORDER traversal iteratively : public static void postOrderIteratively(BST mybst){ : Stack nodestack = new Stack(); : Node node = mybst.root; : Node prevnode = mybst.root; : //initialize the stack : while(node!=null){ : nodestack.push(node); : node = node.left;
|
c*r 发帖数: 9 | |