先序遍历建立二叉树,求保存最大数字的叶子节点到最小数字的叶子结点的距离 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; }
手里拿着一把锤子,看什么都像钉子,编程界的锤子应该就是算法了吧!