二叉树相关算法:迭代式与递归式中序遍历

此处以一个用数组表示的完全二叉树为例,根节点为1

流程:

1、从根节点出发,一路向左,把每一个左孩子(如果有)推入辅助栈

2、当走到最后(左孩子不存在)时,从栈中弹出一个节点进行访问

3、试着转向右孩子进行访问

vector<int>node;
vector<int>tree;
stack<int> s;
void goAlongLeftBranch(int x) {
    while (x<=N)
    {
        s.push(x);
        x = 2 * x;
    }
}
int counter = 1;
void travIn() {
    int x = 1;
    while (true)
    {
        goAlongLeftBranch(x);
        if (s.empty())
        {
            break;
        }
        x = s.top();
        s.pop();
        int temp = node[counter]; 
        tree[x] = temp;  //访问节点
        counter++;
        x = 2 * x + 1; //转向右孩子(本例为完全二叉树)
    }
}
//递归式中序遍历:
void travInRecur(int root){
    int x=root;
    if(2*x<=N){
        travInRecur(2*x);
    }
    visit(x);
    if(2*x+1<=N){
        travInRecur(2*x+1);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容