資料結構 二叉樹的基本操作與相關面試題

2021-08-21 13:34:36 字數 2783 閱讀 4422

二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。

二叉樹中有著一些非常重要的推論:

1. 度為2的結點比度為0的結點少1個;

2. 具有n個結點的完全二叉樹的深度k 為log2(n+1)個結點;

3. 若規定根結點的層數為1,則非空二叉樹第i層上最多有2^(i-1)個結點;

4. 若規定只有根結點的二叉樹深度為1,則深度為k的二叉樹最多有2^k-1個結點;

5. 若對於具有n個結點的完全二叉樹,從上至下,從左至右排序依次從0開始,那麼對於序號i:

(1)若i>0序號為i的結點的雙親結點序號為(i-1)/2;

(2)若2*i+1=n,則無左孩子;

(3)若2*i+1=n,則無右孩子;

二叉樹的結構:

templatestruct bintreenode

bintreenode* _pleft;

bintreenode* _pright;

t _data;

};

建立二叉樹:

void _createbintree(pnode& proot, const t* arr, size_t size, size_t& index, const t& invalid)

}

二叉樹的遍歷:

二叉樹由左子樹+根+右子樹構成,二叉樹的遍歷可以分為四種:前序,中序,後序層序遍歷四種。

前序遍歷:根+左子樹+右子樹,即:先訪問根,在訪問左子樹,在訪問右子樹;

中序遍歷:左子樹+根+右子樹,即:先訪問左子樹,在訪問根,在訪問右子樹;

後序遍歷:左子樹+右子樹+根,即:先訪問左子樹,在訪問右子樹,在訪問根;

層序遍歷:按層的順序,一層一層的遍歷。

void _preorder(pnode proot)//前序

}void _inorder(pnode proot)//中序

}void _postorder(pnode proot)//後序

}void _levelorder(pnode proot)//層序:層序的實現較為複雜,需要借助到佇列,建立佇列,將根結點入隊,取隊頭元素

}

拷貝二叉樹:

//拷貝二叉樹

pnode _copybintree(pnode proot)

return pnewroot;

}

銷毀二叉樹:

//銷毀二叉樹

void _destroybintree(pnode proot)

}

層序遍歷二叉樹:

//層序遍歷二叉樹

void _levelorder(pnode proot)

}

二叉樹節點的個數:

//二叉樹節點的個數

size_t size(pnode proot)

二叉樹葉子節點的個數:

//二叉樹葉子節點的個數

size_t _getleafcount(pnode proot)

二叉樹k層節點個數:

//二叉樹的第k層節點個數

size_t _getlevelcount(pnode proot, size_t k)

二叉樹的高度(深度):

//二叉樹的高度(深度)

size_t _height(pnode proot)

二叉樹查詢值為data的節點:

//二叉樹查詢值為data的節點

void _find(pnode proot, const t& data)

二叉樹找雙親節點:

//二叉樹找雙親節點

pnode _parent(pnode proot, pnode pnode)

二叉樹的映象:

//二叉樹的映象

void _mirror(pnode proot)//映象

判斷是否為完全二叉樹:

bool iscompletebintree()//判斷是否為完全二叉樹  

else

else if (pcur->_pleft)//不飽和結點

else if (pcur->_pright)

return false;

else//不飽和結點

flag = true;

}q.pop();

} return true;

}

資料結構 二叉樹的基本操作(二)

1.理解二叉樹的基本概念和特點 2.掌握二叉樹的鏈式儲存結構 3.掌握二叉樹的基本操作 4.掌握二叉樹遍歷操作 1.實現二叉樹的如下操作,先序遍歷 中序遍歷和後序遍歷的遞迴演算法,二叉樹如下圖所示。採用二叉鏈儲存結構實現 1 採用括號表示法,構建如下二叉樹,並輸出二叉樹b 2 採用遞迴演算法,輸出二...

資料結構中二叉樹相關操作

二叉樹是一種重要的資料結構,關於二叉樹的相關操作尤為重要,其中主要操作大概分為 建樹,遍歷,返回二叉樹的相關引數。pragma once include queue.h include stack.h include include include include define max x,y x ...

資料結構 二叉樹鏈結結構基本操作

二叉樹順序儲存的優缺點 順序儲存結構就是使用陣列來儲存,順序結構操作比較簡單,對於堆結構來說,適合使用順序儲存方式來解決。但陣列只適合表示完全二叉樹,對於一般的二叉樹如果採用順序儲存方式會造成大量的空間浪費,這是我們不希望看到的。由此引出來二叉樹的鏈式儲存。並實現二叉樹的以下操作 建立二叉樹 拷貝二...