方法一:先遍歷根,在遍歷所有的左子樹,最後在遍歷所有的右子樹(不是前序遍歷)
返回0則不是二叉排序數
int isbst(bittree t) //返回1表示為二叉排序樹,返回0表示不是
if(t->rchild!=null)
if(flag1==1 && isbst(t->lchild)==0) return 0;
//這裡flag1的作用是防止無限遍歷左子樹,flag2同理
if(flag2==1 && isbst(t->rchild)==0) return 0;
return 1;
方法二:中序遍歷,看是否從小到大排序,用flag記錄值,如果值為1則是二叉排序樹,反之則否
int minnum = -32768,flag = 1;
typedef struct nodebitreer;
void inorder(bitree *bt)
if(bt!=0){
inorder(bt->lchild);
if(minnum>bt->data)
flag = 0;
minnum = bt->data;
inorder(bt->rchild);
注:第二個方法有個壞處,需要遍歷完整個二叉樹才能的值是否是二叉排序樹
判斷二叉樹是否是平衡二叉樹
二叉樹的節點定義為 public class treenode 二叉樹的深度 根節點到葉節點的最長路徑長度 平衡二叉樹 二叉樹中任一節點的左右子樹的深度相差不超過1 遞迴的方法 如下 public boolean isbalanced treenode root intleft getheight ...
判斷二叉樹是否是平衡二叉樹
平衡二叉搜尋樹 balanced binary tree 具有以下性質 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。思路 如果一顆二叉樹的所有子樹都是平衡二叉樹,它一定是平衡二叉樹。include using namespace std typedef...
判斷二叉樹是否是對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3 遞迴實現 需要滿足兩個子樹 根節點值相同 根節點1的左子樹與根節點2右子樹相同 根節點1...