首先我们从两个方面讲解二叉树的后序遍历(递归+迭代)
一.二叉树的后序遍历.(递归)
思想:
首先我们从二叉树的根节点开始先遍历其左孩子,①接着同样继续遍历其左孩子的左孩子,直到某个左孩子节点的左孩子为NULL时,②开始遍历其右孩子,如果其为NULL则访问该节点的值域,并返回其双亲节点重复第二步的操作,如果其不为NULL则以该节点为根节点重复第一步的操作.直到访问完所有节点时结束递归.
代码:
void BTreePostOrder(struct TreeNode* root,int* arry,int* Size){//后序遍历
if(NULL==root){//递归出口
return;
}
BTreePostOrder(root->left,arry,Size);//遍历左孩子
BTreePostOrder(root->right,arry,Size);//遍历右孩子
arry[(*Size)++]=root->val;//访问该节点
}
运行过程:(如图)
二.二叉树的后序遍历(迭代)
我们应该知道二叉树的前中后序遍历使用递归非常的简单,但是如果用迭代的话就比较有难度了,因此我思考了很久有没有一种迭代类型的算法与递归的框架相似(递归的三种算