设为首页 加入收藏

TOP

二叉树的遍历
2014-11-24 07:56:43 来源: 作者: 【 】 浏览:1
Tags:

二叉树的遍历包括先序遍历,中序遍历,后序遍历,层次遍历等等。本文对此进行整理。

二叉树结构定义如下:


//Definition for binary tree
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};


1. 先序遍历

先序遍历就是先访问根节点,然后再先序遍历左子树,最后先序遍历右子树。先序遍历也就是深度优先搜索(DFS)。

先序遍历递归实现:


vector preorderTraversal(TreeNode *root)
{
vector vals;
preorderTraversal(root, vals);
return vals;
}
void preorderTraversal(TreeNode *root, vector &vals)
{
if(root == NULL) return;
vals.push_back(root->val);
preorderTraversal(root->left, vals);
preorderTraversal(root->right, vals);
}


先序遍历非递归实现:


vector preorderTraversal(TreeNode * root)
{
vector vals;
stack s;
TreeNode * p = root;
while(!s.empty() || p)
{
if(p == NULL)
{
while(!s.empty() && (p == s.top()->right || s.top()->right == NULL))
{ // 右子树已访问,出栈
p = s.top();
s.pop();
}
if(s.empty()) break;
// 左子树已访问,右子树尚未访问,访问右子树
p = s.top()->right;
}
else
{
vals.push_back(p->val);
s.push(p);
p = p->left;
}
}
return vals;
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇动态内存分配(malloc/free)简单实.. 下一篇HashTable简单实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·请问c语言刚入门,该 (2025-12-26 10:21:04)
·python 编程怎么定义 (2025-12-26 10:21:01)
·09-指 针 (一)-c语言 (2025-12-26 10:20:58)
·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)