Binary tree-C++ (drawing)

#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);
	
}

Guess you like

Origin blog.csdn.net/cangzhexingxing/article/details/124725310