樹和二叉樹 演算法設計練習習題

2021-09-30 01:35:59 字數 1744 閱讀 9694

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 ...