二叉树的深度优先遍历
!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!!
作者:mohist
--- 欢迎指正---
今天继续树的遍历。 这里要说的是 二叉树的 深度优先遍历。
深度优先遍历:从根结点开始,先遍历根的左子树,再遍历根右子树。以此类推输出结果。如下图:
深度优先结果: 5 、3、1、4、7、9
分析:
1、先将5入栈, 此时栈中只有5一个元素。
2、将占栈中的5弹栈,在将其右孩子7压栈,此时栈中只有7一个元素。
3、再将右孩子3入栈,此时栈中栈顶到栈底的顺序是:3、7。
4、此时在弹栈, 重复2、3步骤,直到遍历结束
结点的结构:
struct node { // 数据域 int data; // 左节点 node *lc; // 右结点 node *rc; // 构造函数 node() : data(0) , lc(NULL) , rc(NULL) { } };
深度优先遍历函数:
// 3-23-2019 07:11 新增深度优先遍历 void dfs() { cout << endl << endl << "深度优先遍历" << endl; stack<node*> vs; // 思路: 先将根结点入栈,再将其右孩子入栈,再将其左孩子入栈。一次遍历输出 if (NULL != root) vs.push(root); node *tmp_node = NULL; while (false == vs.empty()) { tmp_node = vs.top(); cout << tmp_node->data << " -> "; // 弹出已经输出的元素 vs.pop(); // 将其右孩子入栈 if (NULL != tmp_node->rc) vs.push(tmp_node->rc); // 再将其左孩子入栈 if (NULL != tmp_node->lc) vs.push(tmp_node->lc); } }
测试结果:
GitHub 地址: https://github.com/mohistH/base_data_structure