Tree: Huffman Decoding

Sort by

recency

|

541 Discussions

|

  • + 0 comments

    C++ 14 solution:

    void decode_huff(node * root, string s) {
         if(root == NULL || s.empty() || s == ""){
            cout<<"";
            return;
        }
        
        auto temp = root;
        for(auto c : s){
            temp = c == '0' ? temp->left : temp->right;                
            
            if(temp && temp->data){
                cout<<temp->data;
                temp = root;
            }
        }    
    }
    
  • + 0 comments

    To save some headaches (at least in Python): The problem says intermediate nodes contain null. You'd expect that to be None, but it's a non-printable '\x00'

  • + 0 comments

    Java 8 solution, with recursion instead of loop:

    private int index = 0;
        void decode(String s, Node root) {
            char[] chars = s.toCharArray();
            StringBuilder sb = new StringBuilder();
            while (index < chars.length) {
                Character ss = navigateAndGet(chars, root);
                if (ss != null) {
                    sb.append(ss);
                }
            }
            System.out.print(sb);
        }
    
        private Character navigateAndGet(char[] chars, Node node) {
            if (node.left == null && node.right == null) {
                return node.data;
            }
            if (index == chars.length) {
                return null;
            }
            Node nextNode;
            if (chars[index] == '0') {
                nextNode = node.left;
            } else {
                nextNode = node.right;
            }
            index++;
            return navigateAndGet(chars, nextNode);
        }
    
  • + 0 comments

    Java 8 solution:

    void decode(String s, Node root) {
            StringBuilder decodedString = new StringBuilder();
            Node currentNode = root;
            
            char[] codeArray = s.toCharArray();
            
            for (char c : codeArray) {
                if (currentNode.left != null && c == '0') {
                    currentNode = currentNode.left;
                } else if (currentNode.right != null && c == '1') {
                    currentNode = currentNode.right;
                }
                
                if (currentNode.left == null && currentNode.right == null) {
                    decodedString.append(currentNode.data);
                    currentNode = root;
                }
            }
            
            System.out.println(decodedString.toString());
        }
    
  • + 0 comments

    Simple Java Solutions :

    void decode(String s, Node root) {
            String str = "";
            Node head = root;
            for(int i = 0;i<s.length();i++) {
                if(s.charAt(i)=='0') {
                    head = head.left;
                }
                if(s.charAt(i)=='1') {
                    head = head.right;
                }
                 str+=head.data;
                if(head.left==null && head.right==null) {
    
                head = root;
            }
        }
        System.out.println(str.replace("\0", ""));  
    }