1、設計演算法求二叉樹的結點個數。
void count(binode *root)
}
2、樹中節點的數目左子樹中節點的數目+右子樹中節點的數目+1
templateint bitree::count(binode* root)
3、統計葉子節點的數目增加乙個資料成員,leafcount, 初值為0
對樹進行遍歷。 如果乙個節點是葉子,則將leafcount+1;
可以在前序、中序或後序的遍歷過程中進行計算。
templatevoid bitree:: countleaf(bitreenode* root)
} return;
}
4、樹中葉子結點的數目左子樹中葉子節點的數目+右子樹中葉子節點的數目
templateint bitree::leafcount(binode* root)
5、計算樹的高度高度的定義:max(左子樹高度,右子樹高度)+1
演算法分析
從根節點出發開始計算,
如果root==null, 高度為0;
否則,分別計算左子樹的高度;右子樹的高度;返回max(左子樹高度,右子樹高度)+1
遞迴的定義
templateint bitree::cal_height(bitreenode* root)
6、輸出中綴表示式。並加上相應的括號(a+(b*(c-d)))-(e/f)
基本思想
中序遍歷。
中序遍歷左子樹前,輸出左括號
中序遍歷右子樹後,輸出右括號
如果遍歷葉子結點的左右子樹,不輸出括號
如果遍歷根節點的左右子樹,不輸出括號(否則,會得到形如(a+b)的表示式)
void bitree::in_expression(binode* root)
}
7、輸出二叉樹逆時針旋轉90後的形狀二叉樹逆時針旋轉90後輸出
按照從右向左的順序,中序遍歷
每行輸出乙個結點
按照結點的層次,進行縮排。
template void bitree::left_rotate(binode* root,int level)
}
8、計算二叉樹的寬度所謂寬度是指在二叉樹的各層上,具有結點數最多的那一層上的結點總數 。
struct q_element;
int bitree::width();
q_element s,child;
binode *root;
root=this->root;
if(root==null)
return 0;
s.root=root; s.level=1; q.push(s);
while(!q.empty())
if(s.root->rchild)
q.pop();
} int max=0,i=1;
while(num[i]>0)
return true;
}
樹和二叉樹習題講解
1.在一棵度為4的樹t中,若有20個度為4的結點,10個度為3的結點,1個度為2的結點,10個度為1的結點,則樹t的葉結點個數是 解析 設b為分支總數,n為結點總數,n0,n1,n2 分別代表度為0 1,2的結點的個數。通過分析可以知道除了根結點,每乙個結點的上面都連有乙個分支,故得到關係1 b 1...
二叉樹習題之重建二叉樹
對於給定前序和中序的重建方法。1 前序的第乙個元素一定是樹的根節點,在中序集合中找到此元素,那麼該元素的左面即為根的左子樹,右面為右子樹。2 找到前序的第二個元素,重複上面的步驟。自寫程式的效率大概為 n n 2 或最大的那個元素 這點很坑,斟酌改掉 目前沒發現更快的寫法 自己寫 結果以連續記憶體的...
二叉樹練習
題目 給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 輸入 tree 1 tree 2 1 2 ...