二叉樹的定義:
* 在電腦科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。
* 二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2^個結點;深度為k的二叉樹至多有2^k-1個結點;對任何一棵二叉樹t,如果其終端結點數為n_0,度為2的結點數為n_2,則n_0=n_2+1。
下面我用乙個一維陣列來構建一顆二叉樹:首先呢,我們需要給乙個陣列作為二叉樹中的數值,其次我們還需要乙個非法值,還有乙個需要注意的是這裡在進行下標傳遞的過程需要傳遞它的引用,否則在遞迴中下標著陣列中的數時,就會出現問題。
二叉樹的前中後遞迴遍歷:
//前序
void preorder()
void _preorder(node *root)
} //中序
void inorder()
void _inorder(node *root) }
//後序
void postorder()
void _postorder(node *root)
}
非遞迴:
void preordernotr()
void _preordernotr(node *root)
node *top = s.top();
s.pop();
cur = top->_right;
} }void inordernotr()
void _inordernotr(node *root)
node *top = s.top();
s.pop();
cout << top->_data << endl;
cur = top->_right;
} }void postordernotr()
void _postordernotr(node *root)
node *top = s.top();
if (top->_right == null || top->_right == prev)
else}}
遞迴求節點數:
//求節點數
size_t size()
size_t _size(node *root)
else
}
遞迴求解葉子節點數:
**如下:
//求葉子結點
size_t leafsize()
size_t _leafsize(node *root)
if (root != null &&root->_left == null &&root->_right == null)
return _leafsize(root->_left) + _leafsize(root->_right);
}
求二叉樹的高度:
//求高度
size_t height()
size_t _height(node *root)
size_t left = _height(root->_left);
size_t right = _height(root->_right);
return left > right ? left+1 : right+1;
}
求k層節點數:
//求k層的節點數
size_t sizek(size_t k)
size_t _sizek(node *root,size_t k)
if (k == 1)
else
}
按層遍歷二叉樹:
//求k層的節點數
size_t sizek(size_t k)
size_t _sizek(node *root,size_t k)
if (k == 1)
else
}
二叉樹及其遍歷
滿二叉樹肯定是完全二叉樹,完全二叉樹不一定是滿二叉樹 二叉樹的遍歷 先序遍歷 也叫做先根遍歷 前序遍歷,首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹,如果二叉樹為空則返回。中序遍歷 首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。...
二叉樹及其遍歷
二叉樹是乙個很重要的儲存結構,所以和大家分享一下我對二叉樹的理解並結合 希望讓大家都能對二叉樹有乙個最清晰的認識 首先,二叉樹是每個節點最多有兩個子樹的樹結構,這是二叉樹的定義,二叉樹的結構如下圖 可以看到二叉樹必要的是根節點,也就是a,每個節點都會有左子節點和右子節點,那麼從b開始看,它又是乙個二...
二叉樹及其應用 二叉樹遍歷
給定二叉樹的廣義表表示,構造二叉樹並輸出二叉樹的四種遍歷順序。輸入說明 輸入僅一行,該行僅由 以及大小寫字元構成的二叉樹的廣義表表示,字串長度不超過100。輸出說明 在接下來的四行中依行輸出二叉樹的四種遍歷 輸入樣列 a b d,c e,f h 輸出樣列 abdcefh dbaecfh dbehfc...