Tree has built-in support for RTL languages.
<div class="card">
    <h:form>
        <p:tree value="#{treeIconView.root}" var="doc" dir="rtl">
            <p:treeNode expandedIcon="pi pi-folder-open" collapsedIcon="pi pi-folder">
                <h:outputText value="#{doc.name}"/>
            </p:treeNode>
            <p:treeNode type="app" icon="pi pi-save">
                <h:outputText value="#{doc.name}"/>
            </p:treeNode>
            <p:treeNode type="document" icon="pi pi-file">
                <h:outputText value="#{doc.name}"/>
            </p:treeNode>
            <p:treeNode type="excel" icon="pi pi-file-excel">
                <h:outputText value="#{doc.name}"/>
            </p:treeNode>
            <p:treeNode type="travel" icon="pi pi-file-pdf">
                <h:outputText value="#{doc.name}"/>
            </p:treeNode>
            <p:treeNode type="picture" icon="pi pi-image">
                <h:outputText value="#{doc.name}"/>
            </p:treeNode>
            <p:treeNode type="video" icon="pi pi-video">
                <h:outputText value="#{doc.name}"/>
            </p:treeNode>
        </p:tree>
    </h:form>
</div>
package org.primefaces.showcase.view.data.tree;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import io.quarkus.runtime.annotations.RegisterForReflection;
import org.primefaces.model.TreeNode;
import org.primefaces.showcase.service.DocumentService;
@Named("treeIconView")
@RequestScoped
@RegisterForReflection(serialization = true)
public class IconView {
    @Inject
    DocumentService service;
    private TreeNode root;
    @PostConstruct
    public void init() {
        root = service.createDocuments();
    }
    public void setService(DocumentService service) {
        this.service = service;
    }
    public TreeNode getRoot() {
        return root;
    }
}
package org.primefaces.showcase.domain;
import java.io.Serializable;
import io.quarkus.runtime.annotations.RegisterForReflection;
@RegisterForReflection
public class Document implements Serializable, Comparable<Document> {
    private String name;
    private String size;
    private String type;
    public Document(String name, String size, String type) {
        this.name = name;
        this.size = size;
        this.type = type;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSize() {
        return size;
    }
    public void setSize(String size) {
        this.size = size;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    //Eclipse Generated hashCode and equals
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + ((size == null) ? 0 : size.hashCode());
        result = prime * result + ((type == null) ? 0 : type.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        Document other = (Document) obj;
        if (name == null) {
            if (other.name != null) {
                return false;
            }
        } else if (!name.equals(other.name)) {
            return false;
        }
        if (size == null) {
            if (other.size != null) {
                return false;
            }
        } else if (!size.equals(other.size)) {
            return false;
        }
        if (type == null) {
            return other.type == null;
        } else return type.equals(other.type);
    }
    @Override
    public String toString() {
        return name;
    }
    public int compareTo(Document document) {
        return this.getName().compareTo(document.getName());
    }
}