cay nhi phan tim kiem 2
882 Đếm số lượng nút trên tầng thứ k
int Dem(Tree c, int k)
{
if (c!=NULL)
{
k--;
int a = Dem(c->pLeft,k);
int b = Dem(c->pRight,k);
if (k==0)
return 1 + a + b;
return a + b;
}
return 0;
}
void main()
{
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
printf("
Dem so luong nut tren tang thu k: %d", Dem(c,2));
}
Đếm số lượng nút nằm ở tầng thấp hơn tầng thứ k của cây
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//883 Đếm số lượng nút nằm ở tầng thấp hơn tầng thứ k trên cây
int DemTangThuk(Tree c, int k)
{
if (c!=NULL)
{
k--;
int a = DemTangThuk(c->pLeft,k);
int b = DemTangThuk(c->pRight,k);
if (k==0)
return 1 + a + b;
return a + b;
}
return 0;
}
int Dem(Tree c, int k)
{
if (c!=NULL)
{
int DemSoLuong = 0;
for (int i=1;i<k; i++)
{
DemSoLuong += DemTangThuk(c,i);
}
return DemSoLuong;
}
return 0;
}
void main()
{
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
printf("
Dem so luong nut nam o tang thap hon tang thu k: %d", Dem(c,2));
}
Đếm số lượng nút nằm ở tầng cao hơn tầng thứ k của cây
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//884 Đếm số lượng nút nằm ở tầng cao hơn tầng thứ k trên cây
int ChieuCaoCay(Tree c)
{
if (c!=NULL)
{
int a = ChieuCaoCay(c->pLeft);
int b = ChieuCaoCay(c->pRight);
int max = (a>b)?a:b;
return 1 + max;
}
return 0;
}
int DemTangThuk(Tree c, int k)
{
if (c!=NULL)
{
k--;
int a = DemTangThuk(c->pLeft,k);
int b = DemTangThuk(c->pRight,k);
if (k==0)
return 1 + a + b;
return a + b;
}
return 0;
}
int Dem(Tree c, int k)
{
if (c!=NULL)
{
int DemSoLuong = 0;
for (int i=k;i<ChieuCaoCay(c); i++)
{
DemSoLuong += DemTangThuk(c,i);
}
return DemSoLuong;
}
return 0;
}
void main()
{
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
printf("
Dem so luong nut nam o tang cao hon tang thu k: %d", Dem(c,2));
}
Tính tổng các nút trong cây
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//885 Tính tổng các nút trong cây
int Tinh(Tree c)
{
if (c!=NULL)
{
int a = Tinh(c->pLeft);
int b = Tinh(c->pRight);
return c->iX + a + b;
}
return 0;
}
void main()
{
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
printf("
Tinh tong cac nut trong cay: %d", Tinh(c));
}
Tính tổng các nút lá trong cây
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//886 Tính tổng các nút lá trong cây
int Tinh(Tree c)
{
if (c!=NULL)
{
int a = Tinh(c->pLeft);
int b = Tinh(c->pRight);
if (c->pLeft == NULL && c->pRight == NULL)
return c->iX + a + b;
return a + b;
}
return 0;
}
void main()
{
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
printf("
Tinh tong cac nut lá trong cay: %d", Tinh(c));
}
Tính tổng các nút có đúng một con
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//887 Tính tổng các nút có đúng 1 con trong cây
int Tinh(Tree c)
{
if (c!=NULL)
{
int a = Tinh(c->pLeft);
int b = Tinh(c->pRight);
if ((c->pLeft != NULL && c->pRight == NULL) || (c->pLeft == NULL && c->pRight != NULL))
return c->iX + a + b;
return a + b;
}
return 0;
}
void main()
{
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
printf("
Tinh tong cac nut co dung 1 con trong cay: %d", Tinh(c));
}
Tính tổng các nút có đúng hai con
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//888 Tính tổng các nút có đúng 2 con trong cây
int Tinh(Tree c)
{
if (c!=NULL)
{
int a = Tinh(c->pLeft);
int b = Tinh(c->pRight);
if (c->pLeft != NULL && c->pRight != NULL)
return c->iX + a + b;
return a + b;
}
return 0;
}
void main()
{
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
printf("
Tinh tong cac nut co dung 2 con trong cay: %d", Tinh(c));
}
Tính tổng các nút lẻ
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//889 Tính tổng các nút lẻ
int Tinh(Tree c)
{
if (c!=NULL)
{
int a = Tinh(c->pLeft);
int b = Tinh(c->pRight);
if (c->iX % 2 != 0)
return c->iX + a + b;
return a + b;
}
return 0;
}
void main()
{
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
printf("
Tinh tong cac nut le: %d", Tinh(c));
}
tính tổng các nút lá mà thông tin tại nút đó là giá trị chẵn
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//890 Tính tổng các nút lá mà thông tin tại nút đó là giá trị chẵn
int Tinh(Tree c)
{
if (c!=NULL)
{
int a = Tinh(c->pLeft);
int b = Tinh(c->pRight);
if (c->iX % 2 == 0)
if (c->pLeft == NULL && c->pRight == NULL)
return c->iX + a + b;
return a + b;
}
return 0;
}
void main()
{
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
printf("
Tinh tong cac nut la co gia tri chan: %d", Tinh(c));
}
Tính tổng các nút có đúng 1 con mà thông tin tại nút đó là số nguyên tố
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//891 Tính tổng các nút có đúng một con mà thông tin nút đó là số nguyên tố
bool SoNguyenTo(int n)
{
if (n<=1)
return false;
for (int i=2; i<n; i++)
if(n%i==0)
return false;
return true;
}
int Tinh(Tree c)
{
if (c!=NULL)
{
int a = Tinh(c->pLeft);
int b = Tinh(c->pRight);
if (SoNguyenTo(c->iX))
if ((c->pLeft != NULL && c->pRight == NULL) && (c->pLeft == NULL && c->pRight != NULL))
return c->iX + a + b;
return a + b;
}
return 0;
}
void main()
{
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
printf("
Tinh tong cac nut dung 1 con co gia tri so nguyen to: %d", Tinh(c));
}
Tính tổng các nút có đúng 2 con mà thông tin tại nút đó là số chính phương
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//892 Tính tổng các nút có đúng hai con mà thông tin nút đó là số chính phương
bool SoChinhPhuong(int n)
{
int a = sqrt((double)n);
if (a*a != n)
return false;
return true;
}
int Tinh(Tree c)
{
if (c!=NULL)
{
int a = Tinh(c->pLeft);
int b = Tinh(c->pRight);
if (SoChinhPhuong(c->iX))
if (c->pLeft != NULL && c->pRight != NULL)
return c->iX + a + b;
return a + b;
}
return 0;
}
void main()
{
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
printf("
Tinh tong cac nut dung 2 con co gia tri so chinh phuong: %d", Tinh(c));
}
Tính chiều cao cây
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//893 Tính chiều cao cây
int ChieuCao(Tree c)
{
if (c!=NULL)
{
int a = ChieuCao(c->pLeft);
int b = ChieuCao(c->pRight);
int max = (a>b)?a:b;
return 1 + max;
}
return 0;
}
void main()
{
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
printf("
Tinh chieu cao cay: %d", Tinh(c));
}
Kiểm tra cây nhị phân T có phải là "cây nhị phân tìm kiếm" haykhông?
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//894 Kiểm tra cây nhị phân T có phải là "cây nhị phân tìm kiếm" hay không?
//0 là cây nhị phân
//1 ko phải là cây nhị phân
void TimMax(Tree c, int &Max)
{
if (c==NULL)
return ;
if (c->pLeft != NULL)
Max = (Max > c->pLeft->iX)? Max : c->pLeft->iX;
if (c->pRight != NULL)
Max = (Max > c->pRight->iX)? Max : c->pRight->iX;
Max = (Max > c->iX) ? Max : c->iX;
TimMax(c->pLeft,Max);
TimMax(c->pRight,Max);
}
int KiemTra(Tree c)
{
if (c==NULL)
return 0;
int Left = KiemTra(c->pLeft);
int MaxL, MaxR;
if (c->pLeft != NULL && c->pRight != NULL)
{
TimMax(c->pLeft, MaxL);
TimMax(c->pRight, MaxR);
if (!(MaxL < c->iX && c->iX < MaxR))
return 1;
}
else if (c->pLeft == NULL && c->pRight != NULL)
{
TimMax(c->pRight, MaxR);
if (!(c->iX < MaxR))
return 1;
}
else if (c->pLeft != NULL && c->pRight == NULL)
{
TimMax(c->pLeft, MaxL);
if (!(MaxL < c->iX))
return 1;
}
int Right = KiemTra(c->pRight);
return Left + Right;
}
void XuatKqKiemTra(Tree c)
{
int Kt = KiemTra(c);
if (Kt == 0)
printf("
la cay nhi phan tim kiem");
else
printf("
ko phai cay nhi phan tim kiem");
}
void main()
{
//Dùng để nhập cây nhị phân tìm kiếm
/*Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);*/
//Mẫu tree 1 để test: mẫu này ko phải là cây nhị phân tìm kiếm
//Tree c = NULL;
//c = TaoNode(4);
//Node* a = TaoNode(3);
//c->pLeft = a;
//Node* a1 = TaoNode(2);
//a->pLeft = a1;
//Node* a2 = TaoNode(6);
//a->pRight = a2;
//Node* b1 = TaoNode(5);
//c->pRight = b1;
//Node* b2 = TaoNode(1);
//b1->pLeft = b2;
//Node* b3 = TaoNode(7);
//b1->pRight = b3;
//Node* b4 = TaoNode(0);
//b2->pLeft = b4;
//Node* b5 = TaoNode(8);
//b2->pRight = b5;
//Mẫu tree 2 để test: mẫu này ko phải là cây nhị phân tìm kiếm
/*Tree c = TaoNode(10);
Node* a1 = TaoNode(8);
Node* a2 = TaoNode(2);
Node* a3 = TaoNode(11);
c->pLeft = a1;
a1->pLeft = a2;
a1->pRight = a3;*/
//Mẫu tree 3 để test: mẫu này là cây nhị phân tìm kiếm
Tree c = TaoNode(10);
Node* a1 = TaoNode(8);
Node* a2 = TaoNode(2);
Node* a3 = TaoNode(9);
Node* b1 = TaoNode(12);
c->pLeft = a1;
c->pRight = b1;
a1->pLeft = a2;
a1->pRight = a3;
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
XuatKqKiemTra(c);
}
Kiểm tra cây nhị phân T có phải là "cây nhị phân cân bằng" haykhông?
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
}
}
void Nhap(Tree &c)
{
int chon = 0;
do
{
int x;
printf("
Nhap x: ");
scanf_s("%d",&x);
Node* p = TaoNode(x);
ThemNodeVaoCay(p,c);
printf("Muon nhap thong tin tiep ko? 1: co, 0: ko ~~>");
scanf_s("%d",&chon);
}while(chon);
}
void Xuat(Tree c)
{
if (c!=NULL)
{
if (c->pLeft != NULL)
Xuat(c->pLeft);
printf("%4d", c->iX);
if (c->pRight != NULL)
Xuat(c->pRight);
}
}
//895 Kiểm tra cây nhị phân T có phải là "cây nhị phân cân bằng" hay không?
//Cây nhị phân cân bằng là cây nhị phân tìm kiếm mà tại mỗi nút của nó
//độ cao của cây con trái và cây con phải chêch lệch ko quá 1
//0 là cây nhị phân tìm kiếm
//1 ko phải là cây nhị phân tìm kiếm
void TimMax(Tree c, int &Max)
{
if (c==NULL)
return ;
if (c->pLeft != NULL)
Max = (Max > c->pLeft->iX)? Max : c->pLeft->iX;
if (c->pRight != NULL)
Max = (Max > c->pRight->iX)? Max : c->pRight->iX;
Max = (Max > c->iX) ? Max : c->iX;
TimMax(c->pLeft,Max);
TimMax(c->pRight,Max);
}
int DoCao(Tree c)
{
if (c==NULL)
return 0;
int DoCaoR = DoCao(c->pRight);
int DoCaoL = DoCao(c->pLeft);
int max = (DoCaoR > DoCaoL) ? DoCaoR : DoCaoL;
return max + 1;
}
int KiemTra(Tree c)
{
if (c==NULL)
return 0;
int Left = KiemTra(c->pLeft);
//kiểm tra điều kiện của cây nhị phân tìm kiếm
int MaxL, MaxR;
if (c->pLeft != NULL && c->pRight != NULL)
{
TimMax(c->pLeft, MaxL);
TimMax(c->pRight, MaxR);
if (!(MaxL < c->iX && c->iX < MaxR))
return 1;
}
else if (c->pLeft == NULL && c->pRight != NULL)
{
TimMax(c->pRight, MaxR);
if (!(c->iX < MaxR))
return 1;
}
else if (c->pLeft != NULL && c->pRight == NULL)
{
TimMax(c->pLeft, MaxL);
if (!(MaxL < c->iX))
return 1;
}
//kiểm tra điều kiện của cây nhị phân tìm kiếm cân bằng
int DoCaoR = DoCao(c->pRight);
int DoCaoL = DoCao(c->pLeft);
printf ("
\tnode: %d lech Right: %d, Left: %d", c->iX,DoCaoR, DoCaoL);
if (abs(DoCaoR - DoCaoL) > 1)
//chêch lệch lớn hơn 1
return 1;
int Right = KiemTra(c->pRight);
return Left + Right;
}
void XuatKqKiemTra(Tree c)
{
int Kt = KiemTra(c);
if (Kt == 0)
printf("
la cay nhi phan tim kiem can bang");
else
printf("
ko phai cay nhi phan tim kiem can bang");
}
void main()
{
//Dùng để nhập cây nhị phân tìm kiếm
Tree c = NULL;
Nhap(c);
printf("
Xuat cay nhi phan LNR: ");
Xuat(c);
XuatKqKiemTra(c);
}
Kiểm tra cây nhị phân T có phải là "cây nhị phân cân bằng hoàntoàn" hay không?
Code:
#include <stdio.h>
#include <math.h>
struct Node
{
Node* pLeft;
Node* pRight;
int iX;
};
typedef Node* Tree;
Node* TaoNode(int X)
{
Node* p = new Node;
if (p == NULL)
return NULL;
p->pLeft = NULL;
p->pRight = NULL;
p->iX=X;
return p;
}
void ThemNodeVaoCay(Node* p, Tree &c)
{
if (c == NULL)//nếu cây rỗng
c = p;
else //cây khác rỗng
{
if (p->iX < c->iX)
ThemNodeVaoCay(p,c->pLeft);
else if (p->iX > c->iX)
ThemNodeVaoCay(p,c->pRight);
else
return;
Bạn đang đọc truyện trên: AzTruyen.Top