不是这样的
递归肯定是先访问完本层的
给你写了个简单的类
前序创建树
后续递归遍历树
程序代码:
#include <iostream.h>
#include <stdio.h>
#ifndef TREE_H
#define TREE_H
typedef struct Tree_Node//树节点的结构体
{
int data;
Tree_Node * left_child;
Tree_Node * right_child;
}Tree_Node, *pTree_Node;
class Tree//二叉树类
{
private:
Tree_Node * tree_head;
public:
Tree();
~Tree();
bool CreateTree(pTree_Node & head);//创建一个二叉树
public:
bool TreeDisplay(Tree_Node * root, int (*pfun)(int));//历遍二叉树
bool SetTreeRoot(Tree_Node * tree_root);//创建完成后对根节点指针赋值
};
#endif
Tree::Tree()
{
this->tree_head = NULL;
}
Tree::~Tree()
{
}
bool Tree::CreateTree(pTree_Node &root)
{
int read_temp = 0;
if(EOF==scanf("%d",&read_temp))
return false;
if(0 == read_temp)
root = NULL;
else
{
root = new Tree_Node;
root->left_child = root->right_child = NULL;
root->data = read_temp;
CreateTree(root->left_child);//创建左子树
CreateTree(root->right_child);//创建右子树
}
return true;
}
bool Tree::TreeDisplay(Tree_Node * root, int (*pfun)(int))
{
if(root)
{
if(TreeDisplay(root->left_child,pfun))
if(TreeDisplay(root->right_child,pfun))
if(pfun(root->data))
return true;
return false;
}
else
return true;
}
bool Tree::SetTreeRoot(Tree_Node * tree_root)
{
this->tree_head = tree_root;
return false;
}
int Display(int n)//传递给历遍函数的函数指针
{
cout<<n<<" ";
return 1;
}
int main(int argc, char* argv[])
{
Tree_Node * root = NULL;
Tree t;
if(!t.CreateTree(root))//创建二叉树 传递一个指针的引用
return -1;
t.SetTreeRoot(root);//设置类里面的根节点的指针
t.TreeDisplay(root,Display);//简单递归先序历遍二叉树的所有节点
cout<<endl;
return 0;
}
/*
测试数据
输入
1 2 3 0 0 4 5 0 6 0 0 7 0 0 0
EOF
输出
3 6 5 7 4 2 1
*/