Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

CTDL-Tree-root

//---------------Chen nut gia tri k vao cay root------------------

int InsertTree(tree &root,int k)

{

if (root!=NULL)

{ //neu can ca so trung nhau thi bo dong ngay duoi

if (root->info==k) return 0;

if (root->info>k) return InsertTree(root->left,k);

else return InsertTree(root->right,k);

}

else

{ root=(tree)malloc(sizeof(node));

if (root==NULL) return -1;

root->info=k;

root->left=root->right=NULL;

return 1;

}

}

//---------------Tao cay root---------------

void CreateTree(tree &root)

{ root=NULL;

int k;

cout<<"

In put n=";

cin>>n;

for (int i=1;i<=n;i++)

{

cin>>k;

InsertTree(root,k);

}

H=Height(root);

T1=root;

}

//---------------Cac ham duyet cay---------------

void LNR(tree root)

{

if (root!=NULL)

{

LNR(root->left);

cout<<root->info<<" ";

LNR(root->right);

}

}

void NLR(tree root)

{

if (root!=NULL)

{

cout<<root->info<<" ";

NLR(root->left);

NLR(root->right);

}

}

void LRN(tree root)

{

if (root!=NULL)

{

LRN(root->left);

LRN(root->right);

cout<<root->info<<" ";

}

}

//---------------Kiem tra xem k co trong cay root khong ?---------------

int SearchTree_recursive(tree root,int k)

{

if (root==NULL) return 0;

else

if (root->info==k) return 1;

if (k>root->info) return SearchTree_recursive(root->right,k);

else return SearchTree_recursive(root->left,k);

}

node* SearchTree1(tree root,int k)

{

if (root==NULL) return NULL;

else

if (root->info==k) return root;

if (k>root->info) return SearchTree1(root->right,k);

else return SearchTree1(root->left,k);

}

//---------------Chieu cao cua cay---------------

int Height(tree root)

{ if (root==NULL) return 0;

else

{

long HL=Height(root->left);

long HR=Height(root->right);

return 1+((HL<HR) ? HR:HL);

}

}

//---------------Xoa nut co gia tri k trong cay root--------

int DelTree(tree &root,int k)

{

if (root==NULL) return 0;

if (root->info>k) return DelTree(root->left,k);

if (root->info<k) return DelTree(root->right,k);

else

{

node *p=root;

if (root->right==NULL)

root=root->left;

else

if (root->left==NULL)

root=root->right;

else

{

node *q=root->right;

SearchStandfor(p,q);

}

delete(p);

}

}

void SearchStandfor(tree &p,tree &q)

{

if (q->left) SearchStandfor(p,q->left);

else

{ p->info=q->info;

p=q;

q=q->right;

}

}

//---------------Do lech cua cay root---------------

int Declination(tree root)

{ return abs(Height(root->left) - Height(root->right));

}

//----------Tinh tong cac nut cua cay----------

int Sumtree(tree root)

{

if (root==NULL) return 0;

return root->info+Sumtree(root->left)+Sumtree(root->right);

}

//-----------------Tim so lon nhat cua cay-----------

int Findmax(tree root)

{

int max=root->info;

while (root->right!=NULL)

{

root=root->right;

max=root->info;

}

return max;

}

//------------Dem so nut trong cay----------------

int Countnode(tree root)

{

if (root==NULL) return 0;

return Countnode(root->left)+Countnode(root->right)+1;

}

//-------------Dem so nut la trong cay-------------

int CountLeaf(tree root)

{

if (root==NULL) return 0;

if ((root->left==NULL) && (root->right==NULL)) return 1;

else return CountLeaf(root->left)+CountLeaf(root->right);

}

//---------------So nut co dung 2 cay con---------------

int Count2subTree(tree root)

{

if (root==NULL) return 0;

else

{

if (root->left!=NULL && root->right!=NULL)

return 1+Count2subTree(root->left)+Count2subTree(root->right);

return Count2subTree(root->left)+Count2subTree(root->right);

}

}

//---------------Tim muc cua mot nut co gia tri x----------------

int Levelnode(tree root, int x)

{

if (root!=NULL)

{

if (root->info==x) return 0;

if (root->info>x) return 1+Levelnode(root->left,x);

if (root->info<x) return 1+Levelnode(root->right,x);

}

}

//---------------In cac nut cua muc k---------------

void TraversalLevel(tree root, int k)

{

if (root!=NULL)

{

TraversalLevel(root->left,k);

if (Levelnode(T1,root->info)==k)

cout<<root->info<<" ";

TraversalLevel(root->right,k);

}

}

//---------In cac nut cua cay theo tung cac muc tu 0 den H-1--------

void TraversalLevelTree(tree root)

{

for (int i=0;i<H;i++)

{

TraversalLevel(root,i);

cout<<endl;

}

}

//------------In cac nut tren duong di tu goc den x----------

void PathfromROOT(tree root, int x)

{

cout<<"

In put x = ";cin>>x;

if (SearchTree_recursive(root,x))

{

while (root->info!=x)

{

cout<<root->info<<" ->";

if (root->info>x)

root=root->left;

else

if (root->info<x)

root=root->right;

}

cout<<root->info;

}

else

cout<<"Khong co duong di tu goc den "<<x;

Bạn đang đọc truyện trên: Truyen247.Pro