树
树不同于链表,栈,树是一种非线性结构。
树是一种层级结构,最顶部的节点叫做根。每个节点都有数据,还有可能有指向其他节点的地址。
术语:
根;子节点;父节点;叶节点;内部节点;兄弟节点;深度:节点距离根的距离;高度:从结点x向下到某个叶结点最长简单路径中边的条数;
二叉树:每个节点最多有两个子节点。
二叉搜索树
性质:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
二叉树的实现(插入,搜索)
#include<iostream>
#include<stack>//STL
using namespace std;
struct BstNode {
int data;
BstNode* left;
BstNode* right;
};
BstNode* GetNewNode(int data){
BstNode* newNode = new BstNode();
newNode->data = data;
return newNode;
}
BstNode* Insert(BstNode* root,int data){
if(root == NULL){
//当树为空树
root = GetNewNode(data);
}else{
if(data <= root->data){
root->left = Insert(root->left,data);
}
if(data > root->data){
root->right = Insert(root->right,data);
}
}
return root;
}
bool Search(BstNode* root,int data){
if(root == NULL) return false;
if(root->data == data) return true;
if(data <= root->data) return Search(root->left,data);
if(data > root->data) return Search(root->right,data);
}
int main(){
BstNode* Root = NULL;
Root = Insert(Root,15);
Root = Insert(Root,10);
Root = Insert(Root,20);
Root = Insert(Root,17);
Root = Insert(Root,28);
int x;
cin>>x;
cout<<Search(Root,x)<<endl;
}
运行结果:
查找最大,最小值
#include<iostream>
#include<stack>//STL
using namespace std;
struct BstNode {
int data;
BstNode* left;
BstNode* right;
};
BstNode* GetNewNode(int data){
BstNode* newNode = new BstNode();
newNode->data = data;
return newNode;
}
BstNode* Insert(BstNode* root,int data){
if(root == NULL){
//当树为空树
root = GetNewNode(