亚马逊面试题2(二叉树)

来源:互联网 发布:php hadoop 编辑:程序博客网 时间:2024/06/05 02:03

问题:给定一个二叉树,让每一个叶子节点的右指针指向下一个叶子节点

#include<iostream>using namespace std;class TreeNode{public:    TreeNode* left;    TreeNode* right;    int val;    TreeNode(int);};TreeNode::TreeNode(int value){    left = NULL;    right = NULL;    val = value;}void customInorderTraversal(TreeNode *node, TreeNode **prevleaf){    if (node->left == NULL && node->right == NULL)    {        if (*(prevleaf) != NULL)        {            (*(prevleaf))->right = node;        }        *(prevleaf) = node;    }    else if (node->left == NULL)    {        customInorderTraversal(node->right, prevleaf);    }    else if (node->right == NULL)    {        customInorderTraversal(node->left, prevleaf);    }    else    {        customInorderTraversal(node->left, prevleaf);        customInorderTraversal(node->right, prevleaf);    }}void createTree(TreeNode* node){    TreeNode* h;    h = node;    h->left = new TreeNode(2);    h->right = new TreeNode(3);    h->left->left = new TreeNode(4);    h->left->right = new TreeNode(5);    h->right->left = new TreeNode(6);    h->right->right = new TreeNode(7);    h->left->left->left = new TreeNode(8);    h->left->left->right = new TreeNode(9);}void displayLeafs(TreeNode * rootnode){    TreeNode* root = rootnode;    while (root->left != NULL)    {        //cout<<root->val<<" ";        root = root->left;    }    cout << "\n叶子节点的路径为 : ";    while (root != NULL)    {        cout << root->val << " ";        root = root->right;    }}int main(){    TreeNode* rootnode = (TreeNode*) new TreeNode(1);    cout << "根节点为:" << rootnode->val << endl;    createTree(rootnode);    TreeNode* prev = NULL;    customInorderTraversal(rootnode, &prev);    displayLeafs(rootnode);}




原创粉丝点击