樹與二叉樹操作(一)

2022-06-24 05:15:14 字數 2030 閱讀 4549

非遞迴求二叉樹的高度

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,int

k)

if(j==1)//

全域性變數j控制遞迴結束

preserch(t->lchild,k);

preserch(t->rchild,k);

}}

查詢乙個節點的全部祖先節點

思想:採用後序遍歷

typedef struct

stack1;

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 結點 二叉樹中的每乙個元素都稱為結點。通常二叉樹的許多名...