樹是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 這個題的解法...