本文主要讲解二叉树的遍历,有三种遍历 分为前序遍历、中序遍历和后序遍历,方法主要有递归遍历和非递归遍历,其中非递归遍历主要借助于栈来实现。下面具体介绍。
二叉树的前序遍历
前序遍历的遍历顺序是根节点->左子节点->右子节点.
递归实现:
/* Definition for binary tree 树的节点结构
struct TreeNode {
int value;
TreeNode *leftchild;
TreeNode *rightchild;
TreeNode(int x) : val(x), leftchild(NULL), rightchild(NULL) {}
};*/
void prederTraversal(TreeNode * root){
if(root!=NULL)
{
cout<value<<” “;
prederTraversal(root->leftchild);
prederTraversal(root->rightchild);
}
}
非递归实现:
对于任一结点,其可看做是根结点,因此可以直接访问,访问完之后,若其左孩子不为空,按相同规则访问它的左子树;当访问其左子树时,再访问它的右子树。因此其处理过程如下:
对于任一结点P:
1)访问结点P,并将结点P入栈;
2)判断结点P的左孩子是否为空,若为空,则取栈顶结点并进行出栈操作,并将栈顶结点的右孩子置为当前的结点P,循环至1);若不为空,则将P的左孩子置为当前的结点P;
3)直到P为NULL并且栈为空,则遍历结束。
/* Definition for binary tree 树的节点结构
struct TreeNode {
int value;
TreeNode *leftchild;
TreeNode *rightchild;
TreeNode(int x) : val(x), leftchild(NULL), rightchild(NULL) {}
};*/
void prederTraversal(TreeNode * root){
stack
二叉树的遍历
最新推荐文章于 2024-10-21 08:57:50 发布