二叉树-二叉查找树-AVL树
Posted Lunais
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树-二叉查找树-AVL树相关的知识,希望对你有一定的参考价值。
一、二叉树
定义:每个节点都不能有多于两个的儿子的树。
二叉树节点声明:
1 struct treeNode 2 { 3 elementType element; 4 treeNode * left; 5 treeNode * right; 6 }
应用:
中缀表达式——>后缀表达式(栈的应用)——>表达式树(栈的应用2)
栈的应用2:读取后缀表达式,操作数入栈,遇操作符后,指向栈里前两位元素t1和t2的指针出栈(t1先弹出,作为该操作符的右儿子),并将指向该操作符的指针入栈。
二、二叉查找树
定义:
结构性:二叉树;
排序性:右子树中最小值 > X关键字 > 左子树中最大值(对任意节点关键字X均成立)
1、清空树(递归)makeEmpty
1 searchTree * makeEmpty( searchTree * T) 2 { 3 if( T != NULL) 4 { 5 makeEmpty( T -> left); 6 makeEmpty( T -> right); 7 delete (T); // 基准情况 8 } 9 return T; 10 }
2、Find
searchTree * find( elementType X , searchTree * T) { if( T = NULL) return NULL; //非空判断 if(X < T->element) return find (X , T->left); else if(X > T->element) return find(X , T->right); else return T; //找到元素X }
3、findMin && findMax(举一例,(非)递归法,利用其排序性找到相应节点)
递归法:
searchTree * findMax( searchTree * T) { if( T = NULL) return NULL; //非空判断 else if(T->right == NULL) return T; //基准情况 else return findMax(T->right); }
非递归法:
searchTree * findMax( searchTree * T) { if( T = NULL) return NULL; //非空判断 else while(T->right != NULL) T = T->right; return T; }
4、insert
searchTree * insert( elementType X , searchTree * T) { if( T == NULL) { T = searchTree New(searchTree); if(T == NULL) cout << "out of space." << endl; else { T->element = X; T->left = T->right = NULL; } } else if(X < T->element) T->left = insert(X , T->left); else if(X > T->element) T->right = insert(X , T->right); return T; }
未完待续。。。
以上是关于二叉树-二叉查找树-AVL树的主要内容,如果未能解决你的问题,请参考以下文章