数据结构--二叉树
树是一种重要的非线性数据结构,在计算机科学中有着十分广泛的应用,具有层次性和分支性,我这次仅仅介绍一些二叉树的性质和写法
二叉树是树的特殊一种,具有如下特点:1、每个结点最多有两颗子树,结点的度最大为2。2、左子树和右子树是有顺序的,次序不能颠倒。3、即使某结点只有一个子树,也要区分左右子树。
/* Name: Copyright: Author: 流照君 Date: 2019/8/13 14:42:02 Description: */ #include <iostream> #include<string> #include <algorithm> #include <vector> #define inf 0x3f3f3f3f #define child chlid using namespace std; typedef long long ll; typedef char type; string s; int i=0; typedef struct node{ //树节点 type ch; struct node *lchlid; struct node *rchlid; node(type c):ch(c),lchlid(NULL),rchlid(NULL){ //构造函数 } }binary; //按先后次序输入二叉树中结点的值(一个字符),#表示空树 node* creat_tree() //按先序建树 ,也可以按中或后序建树 { type cha=s[i++] ; if(cha=='#') return NULL; node* h=new node(cha); //c可以用malloc h->lchlid =creat_tree(); h->rchlid =creat_tree(); return h; } void preorder(binary *h) //前序遍历 递归实现 { if(h==NULL) return ; cout<<h->ch ; preorder(h->lchlid); preorder(h->rchlid); } void inorder(binary *h) // 中序遍历 { if(h==NULL) return ; inorder(h->lchlid); cout<<h->ch; inorder(h->rchlid); } void postorder(binary *h) // 后序遍历 { if(h==NULL) return ; inorder(h->lchlid); inorder(h->rchlid); cout<<h->ch; } int get_height(node *h) //得到树的高度 { if(h==NULL) return 0; int height=0; int hl=get_height(h->lchlid); int hr=get_height(h->rchlid); height=max(hl,hr)+1; return height; } int main(int argc, char** argv) { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); cin>>s; node *h=creat_tree(); preorder(h); cout<<endl; inorder(h); cout<<endl; postorder(h); cout<<endl; cout<<get_height(h)<<endl; return 0; }
如果你够坚强够勇敢,你就能驾驭他们