二叉树是一种常见的数据结构,这里总结一下二叉树的三种遍历方法的C++实现。从下面的描述中我们可以看到我们使用递归的方式遍历二叉树是非常简洁的,并且代码的形式和几种遍历方式的定义是非常切合的。
二叉树定义
首先需要做的是二叉树的结构定义,我们定义二叉树如下:
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode();
TreeNode(int input): val(input), left(NULL), right(NULL){}
};
前序遍历
二叉树前序遍历DLR(Display,Left,Right),其遍历顺序是先根节点,后左右。‘前’的意思就是将根节点放在前面。
使用递归方式如下:
void DLR(TreeNode* root, vector<int> &traversal) {
if (root) traversal.push_back(root->val);
else return;
PT(root->left, traversal);
PT(root->right, traversal);
return;
}
中序遍历
二叉树中序遍历LDR(Left,Display,Right),其遍历顺序是先左节点,后根节点和右节点。‘中’的意思是将根节点放在中间。
使用递归方式如下:
void LDR(TreeNode* root, vector<int>& traversal) {
if (root == NULL) return;
IT(root->left, traversal);
traversal.push_back(root->val);
IT(root->right, traversal);
return;
}
后序遍历
二叉树后序遍历LRD(Left,Right,Display),其遍历顺序是先左节点,后右节点和根节点。‘后’的意思是将根节点放在最后。
使用递归的方式如下:
void LRD(TreeNode* root, vector<int>& traversal) {
if (root == NULL) return;
LRD(root->left, traversal);
LRD(root->right, traversal);
traversal.push_back(root->val);
return;
}