資料結構 二叉樹的三種遍歷方式

2022-08-28 11:33:10 字數 2393 閱讀 4612

樹是n(n>=0)個有限個資料的元素集合,形狀像一顆倒過來的樹。

二叉樹是一顆特殊的樹,二叉樹每個節點最多有兩個孩子結點,分別稱為左孩子、右孩子

測試用例

前序遍歷(先根遍歷):(1):先訪問根節點; (2):前序訪問左子樹;(3):前序訪問右子樹; 【1 2 3 4 5 6】

中序遍歷: (1):中序訪問左子樹;(2):訪問根節點; (3):中序訪問右子樹; 【3 2 4 1 6 5】

後序遍歷(後根遍歷):(1):後序訪問左子樹;(2):後序訪問右子樹;(3):訪問根節點; 【3 4 2 6 5 1】

struct binarytreenode

};templateclass binarytree

binarytree(const t* a, size_t size)

~binarytree()

binarytree(const binarytree& t)

binarytree& operator= (binarytreet)

//遞迴前序

void prevorder(binarytreenode* root)

//非遞迴前序

void prevorder_nonr()

if (top->_left)

}cout << endl;

}//遞迴中序

void midorder(binarytreenode* root)

//非遞迴中序

void midorder_nonr()

if (!s.empty())

}cout << endl;

}//遞迴後序

void postorder(binarytreenode* root)

//非遞迴後序

void postorder_nonr()

binarytreenode* top = s.top();

if (top->_right == null

|| top->_right == prevvisited)

else

}cout << endl;

}void size(binarytreenode* root, int& size)

size_t depth(binarytreenode* root)

int leftdepth = depth(root->_left);

int rightdepth = depth(root->_right);

return leftdepth > rightdepth ? leftdepth + 1 : rightdepth + 1;

}void getleafnum(binarytreenode* root, int& num)

getleafnum(root->_left, num);

getleafnum(root->_right, num);

}binarytreenode* find(binarytreenode* root,const t& x)

else if (root->_data == x)

else

}size_t getklevel(binarytreenode* root, int k)

if (k == 1)

else

return getklevel(root->_left, k - 1) + getklevel(root->_right, k - 1)

}protected:

binarytreenode* _copy(binarytreenode* root)

binarytreenode* newroot = new binarytreenode(root->_data);

newroot->_left = _copy(root->_left);

newroot->_right = _copy(root->_right);

return newroot;

}void _destroy(binarytreenode*& root)

if (root->_left == null && root->_right == null)

_destroy(root->_left);

_destroy(root->_right);

delete root;

}binarytreenode* _createtree(const t* a,

size_t size, size_t& index)

return root;

}private:

binarytreenode* _root;

};

資料結構 二叉樹三種遍歷方式

二叉樹的遍歷分三種 先序 中序 後序 假如有一棵樹 先序遍歷 根節點 左孩子 右孩子,則上圖樹的先序遍歷結果為 abc 中序遍歷 左孩子 根節點 右孩子,則上圖樹的遍歷結果為 bac 後序遍歷 左孩子 右孩子 根節點,則遍歷結果為 bca ps 注意根節點的位置,先序在第乙個,中序在中間,後續在最後...

二叉樹三種遍歷方式

三種遍歷方式是按照根節點的訪問順序來定義的 1 前序遍歷 先訪問根結點 然後遍歷左子樹,最後遍歷右子樹 並且,在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。根左右 2 中序遍歷 先遍歷左子樹 然後訪問根結點,最後遍歷右子樹 並且,在遍歷左 右子樹時,仍然先遍歷左子樹,然後訪問...

重建二叉樹 遍歷二叉樹的三種方式

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。示例 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7限制 0 節點個數 5000 這個題的解法...