Algorithms for Managing Tree Structure

Warning! Some information on this page is older than 3 years now. I keep it for reference, but it probably doesn't reflect my current knowledge and beliefs.

17:38
Sat
04
Feb 2012

Algorithms for Managing Tree Structure

What are the ways of storing a tree data structure in memory? I mean a tree with arbitrary number of child nodes. Probably first thing that comes to our minds - as high level programmers - is to dynamically allocate each node as object of some class that would store its data and a collection of pointers to its children. Opposite approach would be to store all nodes in some array - a continuous piece of memory, where each node would refer to other nodes by index or something. Third approach - something in between in terms of sophistication, as well as efficiency - is to have dynamically allocated nodes, but not to store a collection of all child nodes. It is a good idea to employ kind of linked list here. I'd like to describe such data structure and basic algorithms for manipulating it.

The idea is that each node stores - besides its data - 5 pointers (possibly null) to some other nodes: parent, previous sibling, next sibling, first child and last child. It could be seen as equivalent to doubly linked list. It has much more pointers that is needed to be able to traverse whole tree, but thanks to this you can traverse such tree in any order, as well as insert and remove nodes at any point, with best possible time complexity. A node with Parent == null is considered a tree root. Here is a picture of a single node and example tree:

Algorithms for manipulating such tree - inserting and removing nodes - are simple, but you have to be careful to always modify pointers correctly and consider all possible cases. Here is my implementation of a tree node class in C#:

public class Node
{
    public int SomeNodeData { get; set; }
    
    public Node Parent { get { return m_Parent; } }
    public Node PrevSibling { get { return m_PrevSibling; } }
    public Node NextSibling { get { return m_NextSibling; } }
    public Node FirstChild { get { return m_FirstChild; } }
    public Node LastChild { get { return m_LastChild; } }
    public bool Root { get { return Parent == null; } }

    /// <summary>
    /// Remove this and all its children from the tree.
    /// It will become root of a separate tree.
    /// </summary>
    public void Remove()
    {
        // I already am root of separate tree.
        if (Parent == null)
            return;

        if (m_PrevSibling != null)
            m_PrevSibling.m_NextSibling = m_NextSibling;
        else
            m_Parent.m_FirstChild = m_NextSibling;

        if (m_NextSibling != null)
            m_NextSibling.m_PrevSibling = m_PrevSibling;
        else
            m_Parent.m_LastChild = m_PrevSibling;

        m_PrevSibling = null;
        m_NextSibling = null;
        m_Parent = null;
    }

    /// <summary>
    /// Clear children list.
    /// Child nodes will be in invalid state!
    /// </summary>
    public void RemoveAllChildren()
    {
        m_FirstChild = m_LastChild = null;
    }

    /// <summary>
    /// Insert given node as first child of this node.
    /// </summary>
    /// <param name="newNode">Must be valid root of separate tree. Can have children.</param>
    public void InsertFirstChild(Node newNode)
    {
        newNode.m_Parent = this;
        newNode.m_NextSibling = m_FirstChild;

        if (m_FirstChild != null)
            m_FirstChild.m_PrevSibling = newNode;
        else
            m_LastChild = newNode;

        m_FirstChild = newNode;
    }

    /// <summary>
    /// Insert given node as last child of this node.
    /// </summary>
    /// <param name="newNode">Must be valid root of separate tree. Can have children.</param>
    public void InsertLastChild(Node newNode)
    {
        newNode.m_Parent = this;
        newNode.m_PrevSibling = m_LastChild;

        if (m_LastChild != null)
            m_LastChild.m_NextSibling = newNode;
        else
            m_FirstChild = newNode;

        m_LastChild = newNode;
    }

    /// <summary>
    /// Insert given node as previous sibling of this node.
    /// </summary>
    /// <param name="newNode">Must be valid root of separate tree. Can have children.</param>
    public void InsertPrevSibling(Node newNode)
    {
        newNode.m_Parent = m_Parent;
        newNode.m_PrevSibling = m_PrevSibling;
        newNode.m_NextSibling = this;

        if (m_PrevSibling != null)
            m_PrevSibling.m_NextSibling = newNode;
        else
            m_Parent.m_FirstChild = newNode;

        m_PrevSibling = newNode;
    }

    /// <summary>
    /// Insert given node as next sibling of this node.
    /// </summary>
    /// <param name="newNode">Must be valid root of separate tree. Can have children.</param>
    public void InsertNextSibling(Node newNode)
    {
        newNode.m_Parent = m_Parent;
        newNode.m_NextSibling = m_NextSibling;
        newNode.m_PrevSibling = this;

        if (m_NextSibling != null)
            m_NextSibling.m_PrevSibling = newNode;
        else
            m_Parent.m_LastChild = newNode;

        m_NextSibling = newNode;
    }

    /// <summary>
    /// 
    /// </summary>
    /// <returns>Returns true if this node is valid comparing to its surrounding.</returns>
    public bool NodeValid()
    {
        // This is root node.
        if (Parent == null)
        {
            // Must not have siblings.
            if (PrevSibling != null || NextSibling != null)
                return false;
        }
        // This is not root node.
        else
        {
            // Parent must have some children.
            if (Parent.FirstChild == null || Parent.LastChild == null)
                return false;
        }

        if (PrevSibling != null)
        {
            // My prev sibling must point to me.
            if (PrevSibling.NextSibling != this)
                return false;
            // My prev sibling must point to same parent.
            if (PrevSibling.Parent != Parent)
                return false;
            // I can't be first child of my parent.
            if (Parent != null && Parent.FirstChild == this)
                    return false;
        }
        else
        {
            // I must be first child of my parent.
            if (Parent != null && Parent.FirstChild != this)
                    return false;
        }

        if (NextSibling != null)
        {
            // My next sibling must point to me.
            if (NextSibling.PrevSibling != this)
                return false;
            // My next sibling must point to same parent.
            if (NextSibling.Parent != Parent)
                return false;
            // I can't be last child of my parent.
            if (Parent != null && Parent.LastChild == this)
                return false;
        }
        else
        {
            // I must be last child of my parent.
            if (Parent != null && Parent.LastChild != this)
                return false;
        }

        // I have some children.
        if (FirstChild != null)
        {
            // I must have both FirstChild and LastChild set.
            if (LastChild == null)
                return false;

            // My first child must point to me.
            if (FirstChild.Parent != this)
                return false;
            // My first child must not have prev sibling.
            if (FirstChild.PrevSibling != null)
                return false;

            // My last child must point to me.
            if (LastChild.Parent != this)
                return false;
            // My last child must not have next sibling.
            if (LastChild.NextSibling != null)
                return false;
        }
        // I have no children.
        else
        {
            // I must have neither FirstChild nor LastChild set.
            if (LastChild != null)
                return false;
        }

        return true;
    }

    /// <summary>
    /// 
    /// </summary>
    /// <returns>Returns true if this node and all child nodes recursively are valid.</returns>
    public bool TreeValid()
    {
        if (!NodeValid())
            return false;

        for (Node childNode = FirstChild; childNode != null; childNode = childNode.NextSibling)
            if (!childNode.TreeValid())
                return false;

        return true;
    }

    private Node m_Parent;
    private Node m_PrevSibling, m_NextSibling;
    private Node m_FirstChild, m_LastChild;
}

Comments (5) | Tags: algorithms .net | Author: Adam Sawicki | Share

Comments

safsaf
2015-05-27 05:19:03
chanel handbags, http://www.chanelhandbags.net.co/
flat iron, http://www.chiflatiron.net.co/
converse shoes, http://www.converse.net.co/
salvatore ferragamo, http://www.ferragamo.com.co/
gucci handbags, http://www.guccihandbags.com.co/
hollister, http://www.hollister.us.org/
north face outlet, http://www.thenorthfacejackets.in.net/
north face clearance, http://www.northfaceoutlet.co.com/
burberry factory, http://www.burberryoutlet-online.co.com/
ralph lauren uk, http://www.ralph-lauren.org.uk/
polo outlet, http://www.polo-outlets.com/
polo ralph lauren, http://www.ralphlaurenpolo.in.net/
insanity workout, http://www.insanityworkout.net.co/
jimmy choo, http://www.jimmychoo.net.co/
jordan shoes, http://www.jordan-shoes.com.co/
juicy couture outlet, http://www.juicycouture.com.co/
juicy couture handbags, http://www.juicycoutureoutlet.net.co/
kate spade, http://www.kate-spade.com.co/
kate spade handbags, http://www.katespade-outlet.com.co/
louis vuitton, http://www.louisvuitton-outlet.com.co/
cheap michael kors, http://www.michael--kors.us.com/
michael kors outlet online, http://www.michael-kors-handbags.us.com/
michael kors outlet, http://www.michael-kors-outlet.us.org/
michael kors outlet online sale, http://www.michael-kors-outlet-online.us.org/
michael kors outlet store, http://www.michaelkorsoutletonline-sale.us.com/
north face, http://www.northface.us.org/
oakley sunglasses, http://www.oakley-sunglasses.us.org/
pandora jewelry, http://www.pandorajewelry.com.co/
prada handbags, http://www.pradahandbags.com.co/
prada outlet, http://www.pradashoes.com.co/
ray ban outlet, http://www.ray-ban-outlet.us.com/
ray-ban sunglasses, http://www.rayban-sunglasses.us.org/
rolex watches, http://www.replicawatches.us.com/
swarovski crystal, http://www.swarovskicrystal.com.co/
north face outlet, http://www.thenorthface.us.org/
tiffany and co, http://www.tiffanyandco.net.co/
tiffany jewelry, http://www.tiffanyjewelry.us.org/
true religion, http://www.true-religion.com.co/
true religion jeans, http://www.truereligionjeans.net.co/
ugg australia, http://www.uggaustralia.net.co/
ugg boots, http://www.uggboots.net.co/
ugg boots clearance, http://www.uggbootsclearance.com.co/
uggs on sale, http://www.uggsonsale.com.co/
uggs outlet, http://www.uggsoutlet.com.co/
cheap oakley sunglasses, http://www.cheap-oakleysunglasses.in.net/
oakley sunglasses cheap, http://www.oakleysunglassescheap.in.net/
ralph lauren outlet, http://www.ralphlaurenoutletonline.in.net/
polo ralph lauren outlet, http://www.ralphlauren-outlet.co.com/
burberry, http://www.burberryoutlet-online.in.net/
toms shoes, http://www.toms-shoes.com.co/
toms outlet, http://www.toms-outlet.in.net/
christian louboutin, http://www.christian--louboutin.in.net/
tory burch outlet, http://www.tory-burch-outlet.in.net/
gucci outlet, http://www.gucci-outlet.in.net/
longchamp, http://www.longchamp.co.com/
abercrombie, http://www.abercrombie-kids.co.com/
hollister clothing, http://www.hollisterclothing-store.in.net/
hermes, http://www.hermes-bags.co.com/
nfl jerseys, http://www.cheapjerseys.in.net/
beats by dre, http://www.beats-bydre.co.com/
beats headphones, http://www.beatsheadphones.in.net/
hair straightener, http://www.ghdhairstraightener.co.com/
ray ban sunglasses, http://www.rayban-sunglasses.org.uk/
michael kors uk, http://www.michaelkors-uk.org.uk/
michael kors, http://www.michaelkorshandbags.org.uk/
marc jacobs handbags, http://www.marcjacobsonsale.com/
louis vuitton, http://www.louis--vuitton.org.uk/
ralph lauren, http://www.ralphlauren-outlet.org.uk/
nike free, http://www.nikefree-run.org.uk/
rolex watches, http://www.rolex-watches.me.uk/
wedding dresses, http://www.weddingdressesuk.org.uk/
pandora charms, http://www.pandora-charms.org.uk/
thomas sabo, http://www.thomassabo-uk.org.uk/
swarovski, http://www.swarovski-uk.org.uk/
louboutin shoes, http://www.christianlouboutin.org.uk/
nike huarache, http://www.air-huarache.co.uk/
nike roshe, http://www.rosherun.org.uk/
north face, http://www.thenorth-face.org.uk/
louis vuitton canada, http://www.louis--vuitton.ca/
air jordan, http://www.airjordans.us/
jordan retro, http://www.jordanretro.org/
cheap jordans, http://www.cheap-jordans.net/
nike factory, http://www.nikefactory.org/
nike outlet store, http://www.nikestore.us/
nike shoes, http://www.cheap-nikeshoes.com/
nike air max, http://www.nike-air-max.us/
nike air max 2015, http://www.airmax-2015.org/
air max, http://www.airmax-90.org/
nike free run, http://www.nikefree-run.net/
nike free, http://www.nikefree5.net/
supra shoes, http://www.suprashoe.net/
new balance, http://www.newbalance-outlet.org/
mont blanc pens, http://www.montblanc--pens.net/
ferragamo shoes, http://www.ferragamoshoes.net/
mcm bags, http://www.mcm-bags.net/
bottega, http://www.bottega.us/
nike mercurial, http://www.nikemercurial.net/
celine handbags, http://www.celinebags.org/
roshe run, http://www.rosheruns.us/
nike roshe, http://www.nikerosherun.us/
vans shoes, http://www.vansshoes.us/
timberland boots, http://www.timberland-shoes.com/
iphone cases, http://www.iphone-cases.us/
baseball bats, http://www.softball-bats.us/
babyliss pro, http://www.babyliss-pro.net/
louis vuitton, http://www.louisvuitton-outlets.us/
burberry, http://www.burberry-outlet.jp.net/
louboutin, http://www.louboutin.jp.net/
christian louboutin shoes, http://www.christianlouboutinshoes.jp.net/
louis vuitton bags, http://www.louisvuitton.jp.net/
prada outlet, http://www.pradahandbags.co.com/
michael kors outlet, http://www.michael-kors-outlet.co.com/
michael kors outlet online, http://www.michaelkorsoutlet-online.co.com/
tommy hilfiger outlet, http://www.tommyhilfiger.net.co/
mcm backpack, http://www.mcmhandbags.com.co/
kate spade outlet online, http://www.kate-spades.com/
salvatore ferragamo, http://www.salvatoreferragamo.in.net/
louis vuitton outlet online, http://www.louisvuittonas.com/
burberry outlet, http://www.burberryoutlet.org.uk/
burberry clothes, http://www.fashion-clothing.us.com/
the north face, http://www.thenorthface.co.com/
monster beats outlet, http://www.beats-by-dre.co.com/
gucci shoes, http://www.guccishoes.co.com/
longchamp handbags, http://www.longchamp.com.co/
ralph lauren shirts, http://www.ralphlaurenoutletonline.co.com/
coach handbags, http://www.designerhandbagsoutlet.co.com/
beats by dre outlet, http://www.beatsbydrdre.co.com/
coach outlet, http://www.coachoutlet-online.co.com/
coach outlet online, http://www.coachfactory-outlet.co.com/
coach store online, http://www.coachoutletstore.co.com/
michael kors bags sale, http://www.michaelkorsbags.us.org/
coach factory, http://www.coachfactoryoutletonline.co.com/
cheap oakley , http://www.cheapoakleysunglasses.co.com/
hermes outlet online, http://www.hermesoutlet.co.com/
air jordans, http://www.nike-jordanshoes.com/
coach outlet, http://www.coachoutletstoreonline.co.com/
coach outlet usa, http://www.coachhandbags.co.com/
gucci shoes outlet, http://www.gucci.me.uk/
coach outlet, http://www.uptocoachoutlet.com/
michael kors, http://www.michaelkors.so/
gucci factory, http://www.gucci-outlet.co.com/
the north face jackets, http://www.the-northface.in.net/
cheap ugg boots, http://www.cheapuggboots.eu.com/
tory burch outlet, http://www.tory-burchoutlet.us.com/
tommy hilfiger kids, http://www.tommy-hilfigeroutlet.com/
vuitton handbags, http://www.louisvuitton.so/
cheap calvin kleins, http://www.calvin-kleins.com/
christian louboutin shoes, http://www.cheap-christianlouboutinshoes.com/
air jordan shoes, http://www.airjordanshoes2015.com/
burberry outlet online, http://www.burberry2015.net/
abercrombie and fitch, http://www.abercrombiee.com/
cheap oakley sunglasses, http://www.cheapoakley.us.org/
oakley outlet, http://www.oakleyoutlet.us.org/
oakley sunglasses, http://www.oakleysunglassesoutlet.com.co/
swarovski jewelry, http://www.swarovskijewelry.com.co/
replica handbags, http://www.replicahandbags.com.co/
boots on sale, http://www.cheapshoes.com.co/
basketball shoes, http://www.basketballshoes.com.co/
chanel sunglasses, http://www.coco-chanelbags.com.co/
true religion outlet, http://www.truereligion-outlet.com.co/
abercrombie and fitch, http://www.abercrombieand-fitch.com.co/
hermes birkin, http://www.hermesbirkin.com.co/
yoga pants, http://www.yogapants.com.co/
gucci shoes, http://www.guccishoes.us.org/
ray ban sunglasses outlet, http://www.raybansunglassesoutlet.net.co/
omega watches, http://www.omegawatches.us.com/
eyeglass frames, http://www.eyeglassframes.us.com/
eyeglasses online, http://www.eyeglassesonline.us.com/
cheap michael kors, http://www.cheapmichaelkors.co.com/
cheap ray ban, http://www.cheaprayban.co.com/
ray bans, http://www.raybans.co.com/
ray ban wayfarer, http://www.raybanwayfarer.in.net/
easton bats, http://www.cheapbaseballbats.net/
burberry outlet, http://burberry.outletnow.net/
christian louboutin outlet, http://christian.louboutin-outlet.net/
tory burch sandals, http://toryburch.salesandals.net/
soccer shoes, http://www.soccer-shoes.org/
timberland outlet, http://www.timberlandboots-outlet.net/
retro jordans, http://www.retro-jordans.com/
toms shoes outlet, http://www.tomshoesoutlet.com/
ayman
2015-09-08 15:49:50
http://www.khdmat-sa.com/
http://www.khdmat-sa.com/2015/09/03/%D8%B4%D8%B1%D9%83%D8%A9-%D8%AC%D9%84%D9%89-%D8%A8%D9%84%D8%A7%D8%B7-%D9%88%D8%B3%D9%8A%D8%B1%D8%A7%D9%85%D9%8A%D9%83-%D9%88%D8%B1%D8%AE%D8%A7%D9%85-%D8%A8%D8%A7%D9%84%D9%85%D8%AF%D9%8A%D9%86%D9%87/
http://www.khdmat-sa.com/2015/08/31/%D8%B4%D8%B1%D9%83%D8%A9-%D9%85%D9%83%D8%A7%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D8%AD%D8%B4%D8%B1%D8%A7%D8%AA-%D8%A8%D8%B1%D8%A7%D8%B3-%D8%AA%D9%86%D9%88%D8%B1%D8%A9/
http://www.khdmat-sa.com/2015/08/29/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D8%B8%D8%A7%D9%81%D8%A9-%D8%B9%D8%A7%D9%85%D8%A9-%D8%A8%D8%A7%D9%84%D9%82%D8%B7%D9%8A%D9%81/
http://www.khdmat-sa.com/2015/08/28/%D8%B4%D8%B1%D9%83%D8%A9-%D9%83%D8%B4%D9%81-%D8%AA%D8%B3%D8%B1%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%8A%D8%A7%D9%87-%D8%A8%D8%A7%D9%84%D9%85%D8%AF%D9%8A%D9%86%D8%A9-%D8%A7%D9%84%D9%85%D9%86%D9%88/
http://www.khdmat-sa.com/2015/08/12/%D8%B4%D8%B1%D9%83%D8%A7%D8%AA-%D9%86%D9%82%D9%84-%D8%A7%D9%84%D8%A7%D8%AB%D8%A7%D8%AB-%D9%81%D9%89-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0564385131/
http://www.khdmat-sa.com/2015/08/02/0504194709-0551598025-%D8%B4%D8%B1%D9%83%D8%A9-%D8%AA%D9%86%D8%B8%D9%8A%D9%81-%D9%88%D8%BA%D8%B3%D9%8A%D9%84-%D8%A7%D9%84%D8%AE%D8%B2%D8%A7%D9%86%D8%A7%D8%AA-%D8%A8%D8%A7%D9%84%D9%85%D8%AF%D9%8A%D9%86/
http://www.khdmat-sa.com/2015/07/31/0559328721-%D8%B4%D8%B1%D9%83%D8%A9-%D9%85%D9%83%D8%A7%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D8%A8%D9%82-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85/
http://www.khdmat-sa.com/2015/07/31/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%A7%D8%AB%D8%A7%D8%AB-%D9%81%D9%89-%D8%A7%D9%84%D9%85%D8%AF%D9%8A%D9%86%D9%87-%D8%A7%D9%84%D9%85%D9%86%D9%88%D8%B1%D9%87-0504194709/
http://www.khdmat-sa.com/2015/07/13/%D8%B4%D8%B1%D9%83%D8%A9-%D9%85%D9%83%D8%A7%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D8%AD%D8%B4%D8%B1%D8%A7%D8%AA-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85/
http://www.khdmat-sa.com/2015/07/12/%D8%B4%D8%B1%D9%83%D8%A9-%D8%BA%D8%B3%D9%8A%D9%84-%D8%AE%D8%B2%D8%A7%D9%86%D8%A7%D8%AA-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85/
http://www.khdmat-sa.com/2015/07/10/%d8%b4%d8%b1%d9%83%d8%a9-%d8%ba%d8%b3%d9%8a%d9%84-%d8%b9%d9%85%d8%a7%d9%8a%d8%b1-%d8%a8%d8%a7%d9%84%d9%85%d8%af%d9%8a%d9%86%d9%87-%d8%a7%d9%84%d9%85%d9%86%d9%88%d8%b1%d9%87/
http://www.khdmat-sa.com/2015/07/09/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D8%B8%D8%A7%D9%81%D8%A9-%D8%B9%D8%A7%D9%85%D9%87-%D8%A8%D8%A7%D9%84%D9%85%D8%AF%D9%8A%D9%86%D9%87-%D8%A7%D9%84%D9%85%D9%86%D9%88%D8%B1%D9%87/
http://www.khdmat-sa.com/2015/07/04/%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%B3%D9%88%D9%8A%D9%82-%D8%A7%D9%84%D8%A7%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%89-%D8%A8%D8%A7%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A%D9%87-0020112470/
https://khairyayman74.wordpress.com/
https://khairyayman74.wordpress.com/2015/07/14/%D8%B4%D8%B1%D9%83%D8%A9-%D8%BA%D8%B3%D9%8A%D9%84-%D8%A7%D9%84%D9%81%D9%84%D9%84-%D9%88%D8%A7%D9%84%D9%82%D8%B5%D9%88%D8%B1-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85/
https://khairyayman74.wordpress.com/2015/07/13/%D8%A7%D9%81%D8%B6%D9%84-%D8%B4%D8%B1%D9%83%D8%A9-%D9%85%D9%83%D8%A7%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D8%B5%D8%B1%D8%A7%D8%B5%D9%8A%D8%B1-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85/
https://khairyayman74.wordpress.com/2015/06/30/%D8%B4%D8%B1%D9%83%D8%A9-%D8%BA%D8%B3%D9%8A%D9%84-%D9%83%D9%86%D8%A8-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0548923301/
https://khairyayman74.wordpress.com/2015/05/30/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%A7%D8%AB%D8%A7%D8%AB-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85/
https://khairyayman74.wordpress.com/2015/06/14/%D8%BA%D8%B3%D9%8A%D9%84-%D8%A8%D8%B7%D8%B1%D9%85%D9%87-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0548923301/
https://khairyayman74.wordpress.com/2015/07/23/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%A7%D8%AB%D8%A7%D8%AB-%D9%81%D9%89-%D8%A7%D9%84%D8%AE%D8%A8%D8%B1-0559328721/
http://www.khdmat-sa.com/2015/07/26/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D8%B8%D8%A7%D9%81%D9%87-%D8%B9%D8%A7%D9%85%D9%87-%D8%A8%D8%A7%D9%84%D9%85%D9%86%D8%B7%D9%82%D9%87-%D8%A7%D9%84%D8%B4%D8%B1%D9%82%D9%8A%D9%87/
http://www.khdmat-sa.com/2015/07/27/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%A7%D9%84%D8%A7%D8%AB%D8%A7%D8%AB-%D9%81%D9%8A-%D8%A7%D9%84%D8%A7%D8%AD%D8%B3%D8%A7%D8%A1/
http://www.khdmat-sa.com/2015/07/28/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%A7%D9%84%D8%A7%D8%AB%D8%A7%D8%AB-%D9%81%D9%8A-%D8%A7%D9%84%D9%82%D8%B7%D9%8A%D9%81-0559328721/
https://khairyayman74.wordpress.com/2015/07/29/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%A7%D9%84%D8%A7%D8%AB%D8%A7%D8%AB-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A7%D9%84%D8%AC%D8%A8%D9%8A%D9%84/
https://khairyayman74.wordpress.com/2015/08/05/%D8%B4%D8%B1%D9%83%D8%A9-%D8%BA%D8%B3%D9%8A%D9%84-%D9%88%D8%AA%D9%86%D8%B8%D9%8A%D9%81-%D8%AE%D8%B2%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%89-%D8%A7%D9%84%D9%85%D8%AF%D9%8A%D9%86%D9%87-%D8%A7%D9%84%D9%85/
https://khairyayman74.wordpress.com/2015/08/19/%D8%B4%D8%B1%D9%83%D8%A9-%D8%AA%D9%86%D8%B8%D9%8A%D9%81-%D9%85%D9%86%D8%A7%D8%B2%D9%84-%D9%81%D9%8A-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0548923301/
https://www.youtube.com/watch?v=46UIiLjJU4U
https://khairyayman74.wordpress.com/2015/08/31/%D8%B4%D8%B1%D9%83%D8%A9-%D8%BA%D8%B3%D9%8A%D9%84-%D8%A7%D9%84%D8%AE%D8%B2%D8%A7%D9%86%D8%A7%D8%AA-%D8%A8%D8%B1%D8%A7%D8%B3-%D8%A7%D9%84%D8%AA%D9%86%D9%88%D8%B1%D9%87-0556808022/
transfere movers
2015-09-08 15:52:47
http://www.tfa2ol.com/
http://www.tfa2ol.com/naklasas.html
http://www.tfa2ol.com/naklafsh.html
http://www.tfa2ol.com/khasil.html
http://www.tfa2ol.com/mokafha.html
http://www.tfa2ol.com/nzafa.html
http://www.tfa2ol.com/tanzif.html
http://www.tfa2ol.com/nzafaama.html
http://www.tfa2ol.com/nazava.html
http://www.tfa2ol.com/services.html
http://www.tfa2ol.com/aboutus.html
abyath
2015-09-08 16:05:48
http://www.abyath.com/
http://www.abyath.com/2015/09/07/%D8%B4%D8%B1%D9%83%D8%A9-%D8%A7%D8%AB%D8%A7%D8%AB-%D9%88%D8%B9%D9%81%D8%B4-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086-%D8%A7%D8%A8%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B4%D8%B1%D9%82%D9%8A%D8%A9/
http://www.abyath.com/2015/08/29/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%A7%D8%AB%D8%A7%D8%AB-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086-%D9%86%D9%82%D9%84-%D8%B9%D9%81%D8%B4-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85/
http://www.abyath.com/2015/08/25/%D9%86%D9%82%D9%84-%D8%A7%D9%84%D8%A7%D8%A7%D8%AB%D8%A7%D8%AB-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086/
http://www.abyath.com/2015/07/20/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%A7%D8%AB%D8%A7%D8%AB-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086-2/
http://www.abyath.com/2015/07/02/%D9%85%D8%A4%D8%A7%D8%B3%D8%B3%D8%A9-%D9%86%D9%82%D9%84-%D8%A7%D8%AB%D8%A7%D8%AB-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086/
http://www.abyath.com/2015/06/27/%D8%B4%D8%B1%D9%83%D8%A9-%D8%AA%D9%86%D8%B8%D9%8A%D9%81-%D8%AE%D8%B2%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086/
http://www.abyath.com/2015/06/27/%D8%B4%D8%B1%D9%83%D8%A9-%D8%AA%D9%86%D8%B8%D9%8A%D9%81-%D8%AE%D8%B2%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086/
http://www.abyath.com/2015/06/22/%D8%B4%D8%B1%D9%83%D8%A9-%D9%85%D9%83%D8%A7%D9%81%D8%AD%D8%A9-%D8%AD%D8%B4%D8%B1%D8%A7%D8%AA-%D8%A8%D8%A7%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086/
http://www.abyath.com/2015/06/27/%D8%B4%D8%B1%D9%83%D8%A9-%D8%AA%D8%AE%D8%B2%D9%8A%D9%86-%D8%A7%D8%AB%D8%A7%D8%AB-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086/
http://www.abyath.com/tag/%D9%86%D8%B8%D8%A7%D9%81%D8%A9-%D8%B9%D8%A7%D9%85%D8%A9-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086/
http://www.abyath.com/2015/07/08/%D9%86%D9%82%D9%84-%D8%B9%D9%81%D8%B4-%D8%A7%D9%84%D8%AE%D8%A8%D8%B1-0542065086-2/
http://www.abyath.com/2015/06/25/%D9%86%D9%82%D9%84-%D8%B9%D9%81%D8%B4-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086-0583040060/
http://www.abyath.com/2015/06/22/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D8%B8%D8%A7%D9%81%D8%A9-%D8%A8%D9%8A%D9%88%D8%AA-%D8%A8%D8%A7%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086/
http://www.abyath.com/category/%D8%AC%D9%85%D9%8A%D8%B9-%D8%A7%D9%84%D9%85%D9%88%D8%A7%D8%B6%D9%8A%D8%B9/%D9%86%D9%82%D9%84-%D8%B9%D9%81%D8%B4/
http://www.abyath.com/2015/07/06/%D9%86%D9%82%D9%84-%D8%B9%D9%81%D8%B4-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086/
http://www.abyath.com/2015/07/29/%D9%86%D9%82%D9%84-%D8%A7%D8%AB%D8%A7%D8%AB-%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0542065086-%D9%86%D9%82%D9%84-%D8%B9%D9%81%D8%B4-123/
east
2015-09-08 16:30:33
http://www.east-eldmam.com/
http://www.east-eldmam.com/2015/09/05/%d8%b4%d8%b1%d9%83%d8%a9-%d9%86%d9%82%d9%84-%d8%b9%d9%81%d8%b4-%d8%a8%d8%a7%d9%84%d8%af%d9%85%d8%a7%d9%85-0548923301/
http://www.east-eldmam.com/2015/08/07/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%A7%D8%AB%D8%A7%D8%AB-%D9%81%D9%89-%D8%A7%D9%84%D8%AE%D8%A8%D8%B1-0548923301/
http://www.east-eldmam.com/2015/06/26/%D8%B4%D8%B1%D9%83%D8%A9-%D8%AA%D9%86%D8%B8%D9%8A%D9%81-%D9%85%D9%86%D8%A7%D8%B2%D9%84-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0548923301/
http://www.east-eldmam.com/2015/06/26/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D8%B8%D8%A7%D9%81%D9%87-%D8%B9%D8%A7%D9%85%D9%87-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0548923301/
http://www.east-eldmam.com/2015/06/26/%D8%B4%D8%B1%D9%83%D8%A9-%D8%BA%D8%B3%D9%8A%D9%84-%D9%83%D9%86%D8%A8-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0548923301/
http://www.east-eldmam.com/2015/06/26/%D8%B4%D8%B1%D9%83%D8%A9-%D8%AA%D8%B3%D9%84%D9%8A%D9%83-%D9%85%D8%AC%D8%A7%D8%B1%D9%89-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0548923301/
http://www.east-eldmam.com/2015/06/26/%D8%A7%D9%81%D8%B6%D9%84-%D8%B4%D8%B1%D9%83%D8%A9-%D8%BA%D8%B3%D9%8A%D9%84-%D8%B9%D9%85%D8%A7%D8%A6%D8%B1-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0548923301/
http://www.east-eldmam.com/2015/06/26/%D8%B4%D8%B1%D9%83%D8%A9-%D8%BA%D8%B3%D9%8A%D9%84-%D9%81%D9%84%D9%84-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0548923301/
http://www.east-eldmam.com/2015/06/21/%D9%85%D9%83%D8%A7%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D8%AD%D8%B4%D8%B1%D8%A7%D8%AA-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85/
http://www.east-eldmam.com/2015/06/21/%D9%86%D9%82%D9%84-%D8%A7%D9%84%D8%A7%D8%AB%D8%A7%D8%AB-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85/
http://www.east-eldmam.com/2015/06/21/%D8%BA%D8%B3%D9%8A%D9%84-%D8%A7%D9%84%D8%AE%D8%B2%D8%A7%D9%86%D8%A7%D8%AA-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85/
http://www.east-eldmam.com/2015/08/15/%D8%B4%D8%B1%D9%83%D8%A9-%D8%AA%D9%86%D8%B8%D9%8A%D9%81-%D8%A8%D9%8A%D9%88%D8%AA-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85-0548923301/
http://eslamiatview.blogspot.com/
http://eslamiatview.blogspot.com/2015/08/blog-post.html
http://www.domyate.com/

Post comment

Nick *
Your name or nickname
E-mail
Your contact information (optional, will not be shown)
Text *
Content of your comment
Calculate *
(* - required field)
STAT NO AD [Stat] [Admin] [STAT NO AD] [pub] [Mirror] Copyright © 2004-2016 Adam Sawicki
Copyright © 2004-2016 Adam Sawicki