非递归实现输出二叉树中从根节点到叶子节点的所路径,我们用非递归的方法实现。我们在存储节点时,用一个标记域标记从当前节点出发的所有路径是否已经被访问过。如果当前节点的所有路径都被访问过,则标记域为一,只要有一条路径没有被访问过,那么标记域就是零。//存储路径的数组(存储的是当前节点的指针) vector<BinaryTreeNode *> path(10, NULL); //非递归实现从根节点到叶子节点的全路径(前序遍历二叉树的思想) void printPath01(BinaryTreeNode *root) { int pos = 0; stack<BinaryTreeNode *> s; BinaryTreeNode *pointer = root; s.push(NULL); while (pointer) { path[pos++] = pointer;//前序遍历该节点时,存储在路径数组中 //当前节点是叶子节点输出从根节点到叶子节点的路径 if (pointer->left == NULL && pointer->right == NULL) { auto it = path.begin(); while (it != path.end() && *it != NULL) { cout << (*it++)->value << " "; } cout << endl; path[--pos]->flag = 1;//当前节点被访问过 path[pos--] = NULL;//当前路径数组中的相应位置置空 //返回最后一个有未访问节点的路径的位置 for (; pos >= 0; --pos) { if (path[pos]->left && path[pos]->right ) { if (path[pos]->
二叉树中从根结点到叶子结点所有路径(非递归实现)
最新推荐文章于 2024-04-19 14:57:16 发布