基于二叉树的递归遍历算法分析(先,中,后)

基本原理:

  通过不断判断当前节点的状态,确定是否执行函数,然后依次判断左右孩子的状态进行递归遍历;

 

算法分析:

  先序:

  第一:判断当前节点的状态,如果当前节点存在,则进入二,三,四;

  第二:访问该节点;

  第三:判断该节点是否存在左孩子,如果存在,则以左孩子为参数递归调用该函数;

  第四:判断该节点是否存在右孩子,如果存在,则以右孩子为参数递归调用该函数;

  中序:

  将先序中的第二步放到第三步后面;

  后序:

  将先序中的第二步放到第四步后面;

 

代码展示:

  

void preorder_traverse(bitree t)//先序输出二叉树
{
	if (t) {    //判断t是否为叶子节点
		cout << t->data << " ";     //输出该节点
        if (t->lchild) preorder_traverse(t->lchild);    //判断是否存在左孩子,存在即递归左孩子
        if (t->rchild) preorder_traverse(t->rchild);    //判断是否存在右孩子,存在即递归右分子
	}
}

  

void preorder_traverse(bitree t)//中序输出二叉树
{
	if (t) {    //判断t是否为叶子节点
        if (t->lchild) preorder_traverse(t->lchild);    //判断是否存在左孩子,存在即递归左孩子
        cout << t->data << " ";     //输出该节点
        if (t->rchild) preorder_traverse(t->rchild);    //判断是否存在右孩子,存在即递归右分子
	}
}

  

void preorder_traverse(bitree t)//后序输出二叉树
{
	if (t) {    //判断t是否为叶子节点
        if (t->lchild) preorder_traverse(t->lchild);    //判断是否存在左孩子,存在即递归左孩子
        if (t->rchild) preorder_traverse(t->rchild);    //判断是否存在右孩子,存在即递归右分子
        cout << t->data << " ";     //输出该节点
	}
}

  

上一篇:数据结构:第5章学习小结


下一篇:LeetCode 105. 从前序与中序遍历序列构造二叉树