基本原理:
通过不断判断当前节点的状态,确定是否执行函数,然后依次判断左右孩子的状态进行递归遍历;
算法分析:
先序:
第一:判断当前节点的状态,如果当前节点存在,则进入二,三,四;
第二:访问该节点;
第三:判断该节点是否存在左孩子,如果存在,则以左孩子为参数递归调用该函数;
第四:判断该节点是否存在右孩子,如果存在,则以右孩子为参数递归调用该函数;
中序:
将先序中的第二步放到第三步后面;
后序:
将先序中的第二步放到第四步后面;
代码展示:
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 << " "; //输出该节点 } }