LeetCode 144.二叉树的前序遍历 C++代码实现

题目描述:

给定一个二叉树,返回它的 前序 遍历。

 示例:

输入: [1,null,2,3]  
   1
    \
     2
    /
   3 

输出: [1,2,3]

 

思路:1.递归实现,按照前序遍历的定义(根左右),依次递归遍历即可,没有太大难度。

            2.非递归实现,任何递归都可以通过栈来实现非递归,前序遍历只需要将结点边输出边压入栈即可

 

代码实现:

1.递归实现:

template<typename T>
void PreOder(TreeNode<T> *root) {//根左右的顺序
	TreeNode<T> *temp = root;
	if (!temp) return;
	cout << temp->data << " ";
	PreOder(temp->left);
	PreOder(temp->right);
}

 

2.非递归实现

template<typename T>
void PreOderNoRe() {
	TreeNode<T> *temp = root;
	stack<TreeNode<T> *> s;
	if (!temp) return;
	while (temp) {
		s.push(temp);
		cout << temp->data << " ";
		temp = temp->left;
	}

	while (!s.empty()) {
		temp = s.top();
		temp = temp->right;
		s.pop();			//不访问根节点直接去右边结点(因为先序已经访问过)

		while (temp != NULL) {
			s.push(temp);
			cout << temp->data << " ";
			temp = temp->left;
		}

	}
	cout << endl;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值