二叉树的遍历

2019-05-09  本文已影响0人  ustclcl

今天面试被问到不用递归遍历二叉树,当时只想着以前没用过,直接回答了不知道。回来路上想了一下,递归和栈是一样的,直接改成栈就好了啊,嗯,大概最后结束的判断条件要考虑一下,实在不行试试图的遍历。唉,不镇定啊,着急了。

void print_recursion(BinaryTreeNode * n){
  if(n == NULL){
    cout << "null" << endl;
  }
  else{
    cout << n->data;
    print_recursion(n->LeftChild);
    print_recursion(n->RightChild);
  }
}

void print_Norecursion(BinaryTreeNode *n){
  stack<BinaryTreeNode *> NodeStack;
  while(n!=NULL || !NodeStack.empty()){
    while(n){
      cout << n->data <<" ";
      NodeStack.push(n);
      n = n->LeftChild;
    }
    if(!NodeStack.empty()){
      n = NodeStack.top();
      NodeStack.pop();
      n = n->RightChild;
    }
  }
}

int main(int argc, char *argv[]){
  BinaryTreeNode* root;
  root = CreateTree();
  print_recursion(root);
  print_Norecursion(root);
}

./bitree
1
add 1
2
add 2
0
0
3
add 3
4
add 4
0
0
5
add 5
0
0
1 2 Null
Null
3 4 Null
Null
5 Null
Null
1 2 3 4 5

上一篇下一篇

猜你喜欢

热点阅读