棋子

导航

先序遍历建立二叉树,求保存最大数字的叶子节点到最小数字的叶子结点的距离 2016网易编程题

输入:每行3个数字,第一个数字表示左子数节点个数,第二个数字表示右子树结点个数,第3个数字表示当前节点值。

输入就是按照先序遍历顺序提供的。

例如:

1 2 4

0 0 2

1 0 3

0 0 1对应的二叉树就是,先序遍历为4-2-3-1,中序遍历为2-4-1-3。

我们先来按照要求建树,直接就是先序遍历,来看实现:

#include<iostream>
using namespace std;

struct TreeNode{
    int val;
    struct TreeNode* left;
    struct TreeNode* right;
    TreeNode(int x):val(x),left(nullptr),right(nullptr){}
};

void create(TreeNode*& T){
    int v1, v2, val;
    cin >> v1 >> v2 >> val;
    //int remain = v1 + v2;
    T = new TreeNode(val);
    if (v1 == 0 && 0 == v2){
        return;
    }
    if (v1 != 0){
        create(T->left);
    }
    if (v2 != 0){
        create(T->right);
    }
}

void Preorder(TreeNode* root){
    if (root == nullptr)
        return;
    static int count = 1;
    if (root != nullptr){
        cout << "节点" << count++ << ":" << root->val << endl;
    }
    Preorder(root->left);
    Preorder(root->right);
}

int main(){
    TreeNode* tree=nullptr;
    create(tree);
    Preorder(tree);

    return 0;
}
View Code

 

posted on 2016-03-23 11:20  鼬与轮回  阅读(372)  评论(0编辑  收藏  举报