深度優先遍歷二叉樹

2021-06-06 06:17:08 字數 1880 閱讀 5634

//3、深度優先遍歷二叉樹。   

#include #include #include typedef struct treenode /*樹節點結構體定義*/

treenode* insertsbonmyleft(treenode* sb)

treenode* insertsbonmyright(treenode* sb)

char data[256];

struct treenode *lchild;

struct treenode *rchild;

}treenode;

/*棧結構體定義*/

typedef struct stack

//插入

stack_node * insertsbbeforeme(stack_node *sb)

stack_node *oldprev=this->prev;

this->prev=sb;

sb->next=this;

sb->prev=oldprev;

if(oldprev)

return sb;

}//insertsbbeforeme(stack_node *sb)

stack_node * insertsbafterme(stack_node *sb)

stack_node *oldnext=this->next;

this->next=sb;

sb->prev=this;

sb->next=oldnext;

if(oldnext)

return sb;

}//insertsbafterme(stack_node *sb)

//刪除

stack_node * removesbbeforeme()

this->prev=newprev;

newprev->next=this;

return oldprev;

}//removesbbeforeme()

stack_node * removesbafterme()

this->next=newnext;

newnext->prev=this;

return oldnext;

}//removesbafterme()

stack_node * removeme()

else if (oldprev && !oldnext)

else

}//removeme()

}stack_node ;

// stack_node* ptop_node;

stack()

bool isempty()

void push(stack_node* pstacknode) }

void push(treenode* ptreenode)

treenode* pop() }

}stack;

void depthfirst (treenode *root) /*深度優先遍歷*/

//while (!isempty (q))

printf ( "\n ");

}//if (p)

else

printf ( "這是一顆空樹!\n ");

}void main()

/*a b1 c1 d1 d2 c2 d3 d4 b2 c3 d5 d6 c4 d7 d8

press any key to continue

*/

二叉樹深度優先遍歷

在二叉樹的深度優先遍歷中分為前序遍歷 中序遍歷和後序遍歷,其中根據前序遍歷和中序遍歷或後序遍歷和中序遍歷可以推算出完整的二叉樹。三種遍歷方式為 前序遍歷 根節點 左子樹 右子樹 中序遍歷 左子樹 根節點 右子樹 後序遍歷 左子樹 右子樹 根節點 由上述三種遍歷方式可知中序遍歷最為重要,因為中序遍歷可...

二叉樹的深度優先遍歷

歡迎指正 今天繼續樹的遍歷。這裡要說的是 二叉樹的 深度優先遍歷。深度優先遍歷 從根結點開始,先遍歷根的左子樹,再遍歷根右子樹。以此類推輸出結果。如下圖 深度優先結果 5 3 1 4 7 9 分析 1 先將5入棧,此時棧中只有5乙個元素。2 將佔棧中的5彈棧,在將其右孩子7壓棧,此時棧中只有7乙個元...

二叉樹的深度優先遍歷和廣度優先遍歷

深度優先搜尋演算法 depth first search 是搜尋演算法的一種。是沿著樹的深度遍歷樹的節點,盡可能深的搜尋樹的分支。當節點v的所有邊都己被探尋過,搜尋將回溯到發現節點v的那條邊的起始節點。這一過程一直進行到已發現從源節點可達的所有節點為止。如果還存在未被發現的節點,則選擇其中乙個作為源...