方法一:先序遍历:
遍历顺序:根节点–>左孩子–>右孩子
遍历顺序:A–>B–>D–>H–>I–>E–>J–>C–>F–>G
先序遍历的递归实现:
很简单,自己想一下递归的过程就行
代码如下:
#include<bits/stdc++.h.
using namespace std;
struct node//这是二叉树的基本结构
{
node left;
node right;
int value;
};
void preorder(node head)//传进来的是二叉树的头节点,即数顶部的节点 先序遍历
{
if(head==null)
return ;
cout<<head.value<<" ";
preorder(head.left);
preorder(head.right);
}
先序遍历的非递归实现:
运用了一个栈结构实现。
思路:
先序遍历的遍历顺序为根节点–>左孩子–>右孩子,所以往栈中放数时先放右孩子,在放左孩子(左右孩子都不为空的情况下)。根据栈的先进后出的性质,所以先打印左孩子再打印右孩子,但是有的人可能会有疑问,那根节点呢。根节点在往栈中放左右孩子的时候就已经打印完了,所以根节点肯定在左右孩子打印之前就打印完了。
这样打印顺序就为:根节点–>左孩子–>