如何从二阶遍历遍历二叉树中的每个节点的子节点?

问题描述 投票:1回答:1

将预遍历作为int向量(例如{7,4,3,6,5,8,10}),如何列出迭代地每个节点的子节点?

Example output
7 - 4 8
4 - 3 6
6 - 5
8 - 10

我让它生成一棵树,然后递归列出每个孩子,但是我只需要使用给定的向量就可以了。有什么主意吗?

我不是要代码,只是一些很棒的主意

c++ loops binary-search-tree traversal preorder
1个回答
0
投票

经过几次尝试,我成功了。对于每个迭代,您都必须找到更多和更少的元素,进行打印,然后将它们设置为用于避免打印其他分支的值。

#include<stdio.h>
#include<iostream>

using namespace std;

int main(){
    int preOrder[] = {7,4,3,6,5,8,10};
    int size = sizeof(preOrder)/sizeof(int);
    bool used[size] = {false};
    for(int i = 0; i < size; ++i){
        bool lesserFound = false;
        bool greaterFound = false;
        for(int j = i+1; j < size; ++j){
            if(used[j]==true)
                lesserFound=greaterFound=true;

            if(preOrder[j]<preOrder[i] && lesserFound==false){
                cout << preOrder[i] << " - LeftChild: " << preOrder[j] << endl;
                lesserFound=true;
                used[j]=true;
            }else if(preOrder[j]>preOrder[i] && greaterFound==false){
                cout << preOrder[i] << " - RightChild: " << preOrder[j] << endl;
                greaterFound=true;
                used[j]=true;
            }
        }
    }
}

输出:

7 - LeftChild: 4
7 - RightChild: 8
4 - LeftChild: 3
4 - RightChild: 6
6 - LeftChild: 5
8 - RightChild: 10
© www.soinside.com 2019 - 2024. All rights reserved.