1. 統計二叉樹中度為1的結點個數
int
singlenodes
(bitree bt)
else
return0;
}
2. 統計二叉樹中度為2的結點個數
int
doublenodes
(bitree bt)
3. 統計二叉樹中度為0的結點個數
int
zeronodes
(bitree bt)
else
return0;
}
4. 統計二叉樹的高度(遞迴&非遞迴)
int
getdepth
(bitnode* bt)
if(p-
>rchild !=
null)if
(front == last)
//處理改層的最右結點
}return depth;
}int
getdepth
(bitnode* bt)
5. 統計二叉樹的寬度(非遞迴)
typedef
struct
st;int
maxnode
(bitnode *bt)
if(q-
>rchild !=
null)}
max =0;
for(i =
1; i <= levelnum;
++i)
//i從1開始,因為是從第一層開始
}return max;
}else
return0;
}
6. 計算指定結點p所在的層次號
int l =1;
void
leno
(bitnode* p,
int x)
++l;
//當p由上層走向下層,++l
leno
(p->lchild, x)
;leno
(p->rchild, x)
;--l;
//當p由下層返回上一層,l-1
}}
7. 交換二叉樹中每個結點的兩個子女(後序遍歷)
void
swap
(bitree bt)
}
8.計算二叉樹中各結點中最大元素的值
int max =-1
;int
max(bitree bt)
二叉樹演算法趣題
二叉樹中的節點x含有乙個變數wealth表徵了該節點的財富,定義二叉樹中節點x的heritage為其祖先節點 包括x 的所有wealth之和減去節點x的子孫節點的所有wealth之和。求二叉樹中heritage最大的節點及其值。要求不能改變原有二叉樹的結構,不能在節點之上儲存別的資訊,演算法複雜度盡...
二叉樹3(恢復二叉樹)
給一顆帶權 權值各不相同,都是小於10000的正整數 的二叉樹的中序和後序遍歷序列,找乙個葉子使得它到根的路徑上的權值盡可能小,如果有多解,取葉子權值小的。輸入中第一行為中序遍歷,第二行為後序遍歷。例如輸入 3 2 1 4 5 7 6 3 1 2 5 6 7 4 輸出輸入 7 8 11 3 5 16...
(二叉樹提高題)還原二叉樹
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入格式 輸入首先給出正整數n 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出格式 輸出為乙個整數,即該二叉樹的高度。輸入樣例 9 abdfghiec fdhgi...