简单的一个,用C++编写输出用先序遍历输出的二叉树

哈喽。之前还没有写二叉树的时候,我的思维很简单,就是一棵树。
对于一颗二叉树,先写两个类,一个Node结点,一个tree类(里面包括树根和树高)。我是小白,所以想的很少,一开始我以为我可以层次遍历输入,但是我没有弄好一个问题,就是树的数据结构比较复杂。
简单的一个,用C++编写输出用先序遍历输出的二叉树
文章图片


比如我们看这一棵树,如果用递归的方法去创建一棵树,也就是

BiNode* create(int s[],int &pos,int size)//构造一棵二叉树 { { root->lchild=create(s,pos,size); root->rchild=create(s,pos,size); } return root; }

这样去创建一棵树的话,那么按照这个思路走下去,④号结点是处于③号结点之下的,我们无法将④号放到②号下,所以层次遍历是行不通的,我们只能用简单的先序输入,加一些判断条件,建立这样的一棵二叉树。
网上的有些代码都是这样的输入,我一开始也没有懂,后来才慢慢懂得,如果想实现普通的树的创建,我还在写代码中,应该是用队列的方法实现。
这样一个简单的先序输出的话,我们可以设置一棵树,把叶子节点的左右孩子都设为0(或者其他的判断条件)。若检查到0,则返回其叶子的父亲结点,再继续先序遍历,这样一颗树就可以创建了。createTree的部分结束,那么接下来的先序遍历就很简单,就是一个递归的过程。
贴下我的代码。
#include #include using namespace std; class BiNode { public: intdata; BiNode *lchild; BiNode *rchild; }; class BiTree {public: BiNode *root; int height; void create(string &s,int &pos); //创建一棵树 void preOrder(BiNode *T); //先序遍历二叉树}; //先序创建一棵二叉树,需要先序遍历BiNode* create(int s[],int &pos,int size)//构造一棵二叉树 {pos++; BiNode *root=NULL; if((posdata=https://www.it610.com/article/s[pos]; root->lchild=create(s,pos,size); root->rchild=create(s,pos,size); } return root; } //层次输入一棵二叉树 //BiNode * create (int s[],int size)//用队列的数据结构void _PreOrder(BiNode *_root) {BiNode *tmp=_root; if(tmp!=NULL){ cout<data; //访问根节点 _PreOrder(tmp->lchild); //递归遍历左子树 _PreOrder(tmp->rchild); //递归遍历右子树} } int main() {int a[]={1,2,3,0,0,4,0,0,5,6,0,0,0}; int pos; int size; size=13; pos=-1; BiNode *root=create(a,pos,size); //BiNode *root; // root=create(a,pos,size); _PreOrder(root); return 0; }

【简单的一个,用C++编写输出用先序遍历输出的二叉树】这种方法的输入很有讲究,这不是一个通用的方法,一般机试估计这方法不行,下一篇我会详细叙述如何层次遍历一棵二叉树,并实现输出。结果就是这样输出的。
简单的一个,用C++编写输出用先序遍历输出的二叉树
文章图片


下篇再见啦~

    推荐阅读