1. 程式人生 > >二叉樹的前序,中序遍歷

二叉樹的前序,中序遍歷

blog root tac ace bsp else 中序 ret clas

前序遞歸於循環

#include <iostream>
#include <stack>
using namespace std;

struct TreeNode
{
    int val;
    TreeNode *left,*right;
};

void create(TreeNode *&p)
{
    int k;
    cin>>k; //1 2 0 0 3 0 0;
    if(k!=0)
    {
        p=new TreeNode;
        p->val=k;
        create(p->left);
        create(p
->right); } else p=NULL; } void preorder1(TreeNode *p) { if(p) { cout<<p->val; preorder1(p->left); preorder1(p->right); } } void preorder2(TreeNode *root) { stack<TreeNode*> s; TreeNode *p=root; while(p||!s.empty()) {
if(p) { s.push(p); cout<<p->val; p=p->left; } else { p=s.top(); s.pop(); p=p->right; } } }

中序遞歸與循環

void inorder1(TreeNode *p)
{
    if(p)
    {
        inorder1(p->left);
        cout
<<p->val; inorder1(p->right); } } void inorder2(TreeNode *p) { stack<TreeNode*> s; while(p||!s.empty()) { if(p) { s.push(p); p=p->left; } else { p=s.top(); cout<<p->val; s.pop(); p=p->right; } } } int main() { TreeNode *root=new TreeNode; create(root); //preorder1(root); preorder2(root); //inorder1(root); inorder2(root); return 0; }

二叉樹的前序,中序遍歷