您的位置:首页 > 其它

66. 二叉树的前序遍历

2018-02-07 20:14 176 查看
点击打开链接

二叉树的遍历分为前序,中序,后序,层序四种。

题目要求是前序遍历,有递归和非递归两种。相对而言,递归的方法更简短。

(一)递归

void PreOrder(BiNode *bt)
{
if(bt == NULL) return;
else
{
cout << bt->data << " ";
PreOrder(bt->lchild);
PreOrder(bt->rchild);
}
}

(二)非递归

运用栈的思想,将树拆分,按照“根左右”的方法放入栈中,先将根存入,将最左面的子树全都压到栈中,这样出栈的顺序就会符合前序遍历从最左面的根开始进行遍历。

class Solution {
public:
/*
* @param root: A Tree
* @return: Preorder in ArrayList which contains node values.
*/
vector<int> preorderTraversal(TreeNode *root) {
// write your code here
vector<int> t;
TreeNode *tree[100];
int top = -1;
TreeNode* p;
if(root != NULL)
{
tree[++top] = root;
while(top > -1)
{
p = tree[top];
t.push_back(p->val);
top--;
if(p->right != NULL)
{
tree[++top] = p->right;
}
if(p->left != NULL)
{
tree[++top] = p->left;
}
}
}
return t;
}
};

2018/2/7
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: