typedef struct node node;
node *root;
先序遍歷:
dlr(node *root )
}
中序遍歷:
ldr(node *root)
}
後序遍歷:
lrd (node *root)
}
通過先序遍歷和後序遍歷確定不了乙個數。
bintree createbtpre( )
return t;
}
分析1:什麼時候訪問根、什麼時候訪問左子樹、什麼訪問右子樹
當左子樹為空或者左子樹已經訪問完畢以後,再訪問根
訪問完畢根以後,再訪問右子樹。
分析2:為什麼是棧,而不是其他佇列。
先走到的後訪問、後走到的先訪問,顯然是棧結構
分析3:結點所有路徑情況
步驟1:結點的所有路徑情況
如果結點有左子樹,該結點入棧;
如果結點沒有左子樹,訪問該結點;
分析3:路徑所有情況
如果結點有右子樹,重複步驟1;
如果結點沒有右子樹(結點訪問完畢),回退,讓棧頂元素出棧,訪問棧頂元素,並訪問右子樹,重複步驟1
如果棧為空,表示遍歷結束。
注意:入棧的結點表示,本身沒有被訪問過,同時右子樹也沒有被訪問過。
分析4:有乙個一直往左走入棧的操作
#include "iostream"
#include "stack"
using namespace std;
//二叉鍊錶
typedef struct bitnode
bitnode,*bitree;
/* 1
2 3
4 5
*/bitnode *gofarleft(bitnode *t, stack&s)
//如果t有左孩子 入棧
while (t->lchild)
return t; //找到乙個沒有左孩子的節點,就是中序遍歷的起點
}void inorder2(bitnode *t)
else if (!s.empty()) //如果沒有右孩子,說明該節點的樹放完畢,需要返回。
else //如果沒有右孩子,並且棧為空 t = null;
}}void main()
二叉樹程式設計:#include "stdlib.h"
#include "stdio.h"
#include "string.h"
//二叉鍊錶
typedef struct bitnode
bitnode, *bitree;
//三叉鍊錶
typedef struct tritnode
tritnode, *tritree;
//雙親鍊錶
#define max_tree_size 100
typedef struct bptnode
bptnode;
typedef struct bptree
bptree;
void preorder(bitnode *t)
}void inorder(bitnode *t)
}void postorder(bitnode *t)}/*
12 3
4 5
*///1 遍歷演算法 3種
//2int g_count = 0;
void countleaf(bitnode *t) //先根 }}
void countleaf2(bitnode *t, int *ncount) //先根 }}
//求樹的深度
int depth(bitnode *node)
depthl = depth(node->lchild);
depthr = depth(node->rchild);
depthval = 1 + ((depthl > depthr) ? depthl:depthr);
return depthval;
}//拷貝樹
bitnode* copytree(bitnode *t)
bitnode *newnode = null, *newlptr=null,*newrptr=null;
if (t->lchild != null)
if (t->rchild != null)
newnode = (bitnode *)malloc(sizeof(bitnode));
newnode->lchild = newlptr;
newnode->rchild = newrptr;
newnode->data = t->data;
}void main()
int dep = depth(&b1);
printf("樹的深度:%d \n", dep);
bitree *bt = copytree(&b1);
preorder(bt);
system("pause");
}
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...
二叉樹遍歷
二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...
二叉樹遍歷
描述 華為實習生招聘,有一道類似如下的題目 給出二叉樹,如圖1所示 圖 1 二叉樹 要求給出中序遍歷的結果。下面分別就前序遍歷 中序遍歷 後序遍歷進行分析。規律 前序遍歷 根在前 子樹在根後且左子樹比右子樹靠前 中序遍歷 根在中 左子樹在根左邊,右子樹在根右邊 後序遍歷 根在後 子樹在根前且左子樹比...