zoukankan      html  css  js  c++  java
  • 面试题 17.12. BiNode

    二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求依然符合二叉搜索树的性质,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。

    返回转换后的单向链表的头节点。

    注意:本题相对原题稍作改动

    示例:

    输入: [4,2,5,1,3,null,6,0]
    输出: [0,null,1,null,2,null,3,null,4,null,5,null,6]
    提示:

    节点数量不会超过 100000。

    code1:递归

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    private:
        void inorder(TreeNode *root, TreeNode *&tmp_head ){
            if(root == NULL)
                return ;
    
            inorder(root->left, tmp_head);
            tmp_head->right = root;
            root->left = NULL;
            tmp_head = root;
            inorder(root->right, tmp_head);
        }
    public:
        TreeNode* convertBiNode(TreeNode* root) {
            if(root == NULL)
                return NULL;
    
            TreeNode *head = new TreeNode(-1);
            TreeNode *tmp_head = head;
            inorder(root, tmp_head);
            return head->right;
        }
    };

     code2:非递归

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* convertBiNode(TreeNode* root) {
            if(root == NULL)
                return NULL;
    
            TreeNode *head = new TreeNode(-1);
            TreeNode *tmp_head = head;
            stack<TreeNode *> stack;
            while(!stack.empty() || root){
                if(root){
                    stack.push(root);
                    root = root->left;
                }
                else{
                    root = stack.top();
                    stack.pop();
                    root->left = NULL;
                    tmp_head->right = root;
                    tmp_head = root;
                    root = root->right; 
                }
            }
            return head->right;
        }
    };
  • 相关阅读:
    因子个数筛
    原根
    Pollard Rho (大数分解算法)
    Miller-Rabin(素数测试算法)
    离不开的微服务架构,脱不开的RPC细节(值得收藏)!!!
    微服务架构,多“微”才合适?
    互联网架构,究竟为啥要做服务化?
    markdown
    docker安装、启动(挂载外部配置和数据)
    程序员代码面试指南上(1-3)
  • 原文地址:https://www.cnblogs.com/tianzeng/p/13420214.html
Copyright © 2011-2022 走看看