問題描述:
二叉樹這部分的知識可謂是資料結構的重中之重,相關方面的知識點還是蠻多的,雖然有些知識點確實是難度頗高,但是其大部分的知識點還是能簡單一些的,,所以在筆試面試中我們多多少少能遇見二叉樹的相關題型,可以說二叉樹以及其相關拓展的知識點玩兒6了,資料結構至少一半的知識已收入囊中了。
筆試面試中經常會遇到讓你寫出某個或某些二叉樹中的成員函式,例如:節點的遍歷順序(前序,中序,後序,層序),怎樣求第k層的節點數,求乙個二叉樹的高度等,,所以在此先從二叉樹的基礎構建開始,,逐漸添磚加瓦,一步步完善二叉樹的相關操作,希望多多少少能與君共勉。
#includeusing namespace std;
templatetypedef struct binarynode
//定義二叉鍊錶
};templateclass binarytree //二叉樹類
binarytree(const t*a, size_t size, const t&invalid)
:_root(null)//a陣列利用下標可訪問具體節點位置,size為大小,invalid為非法值,例如符號,字母等情況
binarytree(const binarytree&obj)//拷貝建構函式
: _root(null)
binarytree& operator=(const binarytree&obj)//賦值運算子過載函式
return *this;
} ~binarytree()//析構函式 }
public:
size_t size()//結點個數:左子樹節點+右子樹節點+根節點
size_t depth()//樹的高度(深度):左子樹與右子樹層數取其大的那乙個
size_t leafsize()//葉子節點數:左子樹葉子節點+右子樹葉子節點
size_t klevelsize(int k)//第k層節點
protected:
void _destroy(node* root)//刪除節點
if (root->_left == null && root->_right == null)
_destroy(root->_left);
_destroy(root->_right);
} node* _copy(node* root)//複製節點
node* root = new node(root->_data);
root->_left = _copy(root->_left);
root->_right = _copy(root->_right);
return root;
} size_t _leafsize(node* root)
if (root->_left == null && root->_right == null)
return _leafsize(root->_left) + _leafsize(root->_right);
} size_t _size(node* root)
return _size(root->_left) + _size(root->_right) + 1;
} size_t _depth(node* root)
int leftdepth = _depth(root->_left);
int rightdepth = _depth(root->_right);
return leftdepth > rightdepth ? (leftdepth + 1) : (rightdepth + 1);//利用三目運算子的性質,取其值大的那乙個為樹的深度
} size_ t _klevelsize(node* root, int k)
if (k == 1)
return _klevelsize(root->_left, k - 1) + _klevelsize(root->_right, k - 1);
} node* _createtree(const t*a, size_t size, const t&invalid, size_t &index)//樹的建立
return root;
}private:
node* _root;
};
二叉樹及其應用 二叉樹建立
給定二叉樹的資料型別如下 typedef char element struct node typedef struct node btnode typedef struct node btree 二叉樹建立i 完成btree create btree char s 函式,該函式由字串s建立一顆二叉...
二叉樹的建立及其基本操作
實驗內容 1 按照前序次序建立一棵二叉樹 2 用前 中 後序遞迴遍歷的方法遍歷二叉樹 3 求二叉樹的深度 4 求二叉樹的所有結點數 實驗基本要求 掌握二叉樹的鏈式儲存結構的建立方法和對二叉樹的各種操作演算法 include include define maxsize 100 typedef cha...
二叉樹基礎及其基本操作
2 二叉樹 樹是一種非線性結構。樹上的任意節點,就只有乙個父節點,可以有多個子節點。節點的度 乙個節點含有的子樹的個數稱為該節點的度 樹的度 一棵樹中,最大的節點的度稱為樹的度 葉子節點或終端節點 度為0的節點稱為葉子節點 雙親節點或父節點 若乙個節點含有子節點,則這個節點稱為其子節點的父節點 孩子...