二叉树后序遍历递归与非递归实现

来源:互联网 发布:java数字证书开发源码 编辑:程序博客网 时间:2024/05/22 14:40
//后序遍历(递归)void postTraverse(TreeNode* node){if (node){postTraverse(node->left);postTraverse(node->right);cout << node->val << endl;}}//后序遍历(非递归)void postTraverse2(TreeNode* node){if (node == NULL)cout << "empty!" << endl;else{stack<TreeNode*> s;stack<int> v; // 因为有些结点需要访问两次,所以设置一个标志位while (node){s.push(node);v.push(0);root = root->left;}while (!s.empty()){root = s.top();while (root->right && v.top() == 0){   //v.top() == 0 表示访问了一次v.pop();v.push(1);root = root->right;s.push(root);v.push(0);while (root->left){s.push(root->left);v.push(0);root = root->left;}}root = s.top();cout << root->val << endl;s.pop();v.pop();}}}

原创粉丝点击