#include<iostream> using namespace std; //定义节点 typedef struct node { struct node *lchild; struct node *rchild; int data; }BiTreeNode, *BiTree; //*BiTree的意思是给 struct node*起了个别名,叫BiTree,故BiTree为指向节点的指针。 //按照前序顺序建立二叉树 void createBiTree(BiTree &T) //&的意思是传进来节点指针的引用,括号内等价于 BiTreeNode* &T,目的是让传递进来的指针发生改变 { int c; cin >> c; if(0 == c) //当遇到#时,令树的根节点为NULL,从而结束该分支的递归 T = NULL; else { T = new BiTreeNode; T->data=c; createBiTree(T->lchild); createBiTree(T->rchild); } } bool judgeSortT(BiTree T)//判断是否为排序树 { bool lj; if(!T) return 1; lj=judgeSortT(T->lchild);//左子树判断 if(T->lchild && T->lchild->data>T->data) lj=0; if(T->rchild && T->data>T->rchild->data) lj=0; return lj && judgeSortT(T->rchild);//T的左子树及其当前结点T均符合要求则对右子树进行判断 } void dispLeaf(BiTree T,int lev)//显示叶子结点 { if(T) { dispLeaf(T->lchild,lev+1); if(!T->lchild && !T->rchild) cout<<T->data<<' '<<lev<<endl; dispLeaf(T->rchild,lev+1); } } //前序遍历二叉树并打印 void preTraverse(BiTree T) { if(T) { cout<<T->data<<" "; preTraverse(T->lchild); preTraverse(T->rchild); } } //中序遍历二叉树并打印 void midTraverse(BiTree T) { if(T) { midTraverse(T->lchild); cout<<T->data<<" "; midTraverse(T->rchild); } } //后续遍历二叉树并打印 void postTraverse(BiTree T) { if(T) { postTraverse(T->lchild); postTraverse(T->rchild); cout<<T->data<<" "; } } int main() { BiTree T; //声明一个指向二叉树根节点的指针 createBiTree(T); cout<<"二叉树创建完成!"<<endl; // cout<<"前序遍历二叉树:"<<endl; //preTraverse(T); //cout<<endl; cout<<"中序遍历二叉树:"<<endl; midTraverse(T); cout<<"排序树"<<judgeSortT(T)<<endl; dispLeaf(T,1); // cout<<endl; // cout<<"后序遍历二叉树:"<<endl; // postTraverse(T); return 0; }