#include<iostream>
#include<queue>
#include<stack>
#include<iomanip>
using namespace std;
int ans=0;
class tnode{
public:
int nodeValue;
tnode *left, *right,*parent;
tnode(){};
tnode (const int& item, tnode *lptr = NULL, tnode *rptr = NULL,tnode *pptr=NULL):nodeValue(item), left(lptr), right(rptr),parent(pptr){}
};
class BinTree{
public:
tnode *root;
public:
void graph(){graphAux(0,root);}
void graphAux(int indent,tnode*root); //树状输出 //使二叉树层状输出
void setroot(int x){tnode *tt=new tnode(x);root=tt;}; //创建二叉树的根节点
tnode *insert(tnode*Parent, int value, int oper); //在parent位置插入节点
tnode *getroot(){return root;};}; //返回该二叉树的根节点
void BinTree::graphAux(int indent,tnode*root){
if(root!=0){
graphAux(indent+8,root->right);
cout<<setw(indent)<<" "<<root->nodeValue<<endl;
graphAux(indent+8,root->left);
}
}
tnode *BinTree::insert(tnode*Parent, int value, int oper){
tnode *t=new tnode(value);
if(oper==0&&Parent->left==NULL) {Parent->left=t;t->parent=Parent;return t;}
else if(oper!=0&&Parent->right==NULL) {Parent->right=t;t->parent=Parent;return t;}
cout<<"该节点位置存在,插入无效!!!"<<endl;return 0;}
void zhongxu(tnode *root){ //中序遍历
stack<tnode*>s;
tnode *t1=root;
while(t1!=NULL||!s.empty()){
if(t1!=NULL){
s.push(t1);
t1=t1->left ;
}
else {
t1=s.top();
cout<<t1->nodeValue<<" " ;
s.pop();
t1=t1->right ;
}
}
}
void Leaf1(tnode* T)
{if(T!=NULL)
{ Leaf1(T->left);
Leaf1(T->right);
if(T->left==NULL&&T->right==NULL)
ans++;}
}
int main(){
tnode *p1,*p2,*p3,*p4;
BinTree tree;
tree.setroot(4);
p1=tree.root;
p1=tree.insert(p1,5,2);
p2=tree.insert(p1,6,0);
p2=tree.insert(p2->parent,8,4);
/*p2=tree.insert(p1,5,0);
p3=tree.insert(p1,2,1);
p4=tree.insert(p3,78,4);
p2=tree.insert(p2,88,0);
p4=p2;
p4=tree.insert(p4,12,0);
p4=tree.insert(p4->parent,52,3);
p2=tree.insert(p2->parent,45,1);
p2=tree.insert(p2,26,0);
p2=tree.insert(p2->parent,77,2);
p4=p3;
p3=tree.insert(p3,99,0);
p3=tree.insert(p3,22,0);
p3=tree.insert(p3->parent,55,7);
p4=tree.insert(p4->right,49,0);*/
Leaf1(tree.getroot());
cout<<"---------------------------该二叉树共有叶子数----------------------------------"<<ans<<endl;
cout<<"---------------------------二叉树按照树形输出结果如下(竖向)------------------"<<endl;
tree.graph();
cout<<"---------------------------中序遍历结果如下----------------------------------------"<<endl;
zhongxu(tree.root);
}
Binary tree-C++ (drawing)
Guess you like
Origin blog.csdn.net/cangzhexingxing/article/details/124725310
Recommended
Ranking