在二叉树的操作中,二叉树的遍历是基本的操作,对于二叉树的遍历操作,主要分为:
- 前序遍历:根左右
- 中序遍历:左根右
- 后序遍历:左右根
- 层次遍历
后续遍历补充:
思想:相对于前序和中序,后续遍历的实现就稍显麻烦。我们要保证一个节点要在左孩子和右孩子之后才能访问,那么有下面三种情况:
1.它是叶子节点,没有左右孩子。可以直接访问。
2.它有左右孩子,但是左右孩子都已经被访问过,也可以直接访问该节点。
3.有左右孩子,且左右孩子没有访问过。此时要先入栈右孩子,再入栈左孩子。
为了确认一个节点的左右孩子是否被访问过,我们就要定义一个pPre指针。访问过一个节点后,就将pPre指向它,在下一轮判断就可以通过p->lchild || p->rchild == pPre来作为子节点是否被访问过的条件了。
后序遍历代码调整:
#include "bits/stdc++.h"
using namespace std;
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(