非遞迴求二叉樹的高度
void bidepth(bitree &t)q.rear++;
q.b[q.rear]=t;
while(q.frontif(bit->rchild)
if(last==q.front)
}printf(
"二叉樹的高度:%d\n
",level);
}
遞迴求二叉樹高度
int treedepth(bitree &t)int ldepth=treedepth(t->lchild);//
左子樹高度
int rdepth=treedepth(t->rchild);//
右子樹高度
if(ldepth>rdepth)
else
return rdepth+1
;}
自下而上,自右而左層次遍歷二叉樹
void delevelorder(bitree &t)while(q.frontif(bit->rchild)
}while(s.top!=-1
)}
判斷是否為一棵完全二叉樹
void completetree(bitree &t)q.rear=q.rear+1
; q.b[q.rear]=t;
while(q.frontelse}}
}if(flag==0)
else
}
先序遍歷列印第k個節點的值
void preserch(bitree &t,intk)
if(j==1)//
全域性變數j控制遞迴結束
preserch(t->lchild,k);
preserch(t->rchild,k);
}}
查詢乙個節點的全部祖先節點
思想:採用後序遍歷
typedef structstack1;
void searchpar(bitree &t,elemtype x)
if(bit!=null&&bit->data==x)
exit(
1);//
找到祖先後結束
}
while(top!=-1&&s1[top].tag==1
)
if(top!=-1
) }
}
求二叉樹的帶權路徑長度
void workwpl(bitree &t)q.rear++;
q.b[q.rear]=t;
depth=depth+1
;
while(q.frontif(bit->lchild)
if(bit->rchild)
if(q.front==lastnode)
}printf(
"二叉樹的帶權路徑為:%d\n
",number);
}
求二叉樹的寬度(二叉樹節點最多一層的節點數)
void biwidth(bitree &t)q.b[++q.rear]=t;
width=1
;
while(q.frontif(bit->rchild)
if(q.front==lastnode)
number=0
; }
}printf(
"二叉樹的寬度:%d\n
",width);
}
樹與二叉樹操作 二
交換所有節點的左右子樹 void swaptree bitree t 判斷兩個樹是否相似 只有根節點或者是為空 int similartree bitree t1,bitree t2 if t1 null t2 null s1 similartree t1 lchild,t2 rchild s2 s...
樹與二叉樹 一
樹是n n 0 個結點的有限集,它或為空樹 n 0 或為非空樹 1 有且僅有乙個稱為根的結點 2 除根結點以外的其餘結點可分為m m 0 個互補相交的有限集t1,t2,tm,其中每乙個集合本身又是一棵樹,並且稱為根的子樹。空樹 一般的樹根 即根結點 沒有前驅 葉子 即終端結點 沒有後繼 森林 指m棵...
二叉樹 滿二叉樹與完全二叉樹
二叉樹 binary tree 是n n 0 個元素的有限集合,該集合為空或者為由乙個稱為 根 的元素及兩個不相交的 被分別稱為左子樹和右子樹的二叉樹組成 二叉樹的基本特點 每個結點最多有兩棵子樹 左子樹和右子樹是有順序的,且不可顛倒 圖一1 結點 二叉樹中的每乙個元素都稱為結點。通常二叉樹的許多名...