二叉樹的遍歷方法

二叉樹的各類遍歷方法

二叉樹的遍歷主要有三種,前序、中序、後序;

前序遍歷:先訪問根節點,再訪問左子樹,最後訪問右子樹

中序遍歷:先訪問左子樹,再訪問根節點,最後訪問右子樹

後序遍歷:先訪問左子樹,再訪問右子樹,最後訪問根節點


前序遍歷:ABDFGHIEC
中序遍歷:FDHGIBEAC
後序遍歷:FHIGDEBCA

遞歸實現:
前序:
vector<int> vector<int> preorderTraversal(TreeNode* root){ vector<int> ret; dfsPreOrder(root,ret); return ret; } void dfsPreOrder(TreeNode* root,vector<int> &ret){ if(root==NULL) return; ret.push_back(root->val);//存儲根節點 if(root->left!=NULL) dfsPreOrder(root->left,ret);//訪問左子樹 if(root->right!=NULL) dfsPreOrder(root->right,ret);//訪問右子樹 }(TreeNode* root){
vector<int> ret;
dfsPreOrder(root,ret);
return ret;
}
void dfsPreOrder(TreeNode* root,vector<int> &ret){
if(root==NULL) return;
ret.push_back(root->val);//存儲根節點
if(root->left!=NULL) dfsPreOrder(root->left,ret);//訪問左子樹
if(root->right!=NULL) dfsPreOrder(root->right,ret);//訪問右子樹
}


中序:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ret;
inorder(root,ret);
return ret;
}
void inorder(TreeNode* p,vector<int>& ret)
{
if(p==NULL) return;
inorder(p->left,ret);//訪問左子樹
ret.push_back(p->val);//訪問根節點
inorder(p->right,ret);//訪問右子樹
}

後序:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ret;
inorder(root,ret);
return ret;
}
void inorder(TreeNode* p,vector<int>& ret)
{
if(p==NULL) return;
inorder(p->left,ret);//訪問左子樹
inorder(p->right,ret);//訪問右子樹
ret.push_back(p->val);//訪問根節點
}

發佈了38 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章