/**
* definition for a binary tree node.
* struct treenode
* };
*/
中序遍歷
中序遞迴版
class solution ;
vector
ret;
help(root, ret);
return ret;
}void help(treenode* node, vector
& ret)
};
中序非遞迴
class solution ;
vector
ret;
std::stack
sk;treenode* read = root;
while(read != null || !sk.empty())
else
}return ret;
}};
前序遍歷
前序-遞迴版
class solution ;
vector
ret;
help(root, ret);
return ret;
}void help(treenode* node, vector
& ret)
};
前序-非遞迴版
class solution ;
vector
ret;
std::stack
sk;treenode* read = root;
sk.push(read);
while (!sk.empty())
if (read != null && read->left != null)
}return ret;
}};
注:前序非遞迴的終止條件不能和中序一樣。
while (!sk.empty())
因為所有節點被彈出後,read 值不為null,這樣會導致對空的 stack 執行pop操作。c++是不允許這樣的。
後序遍歷
後序-遞迴
class solution ;
vector
ret;
help(root, ret);
return ret;
}void help(treenode* node, vector
& ret)
};
後序-非遞迴
/**
* definition for a binary tree node.
* struct treenode
* };
*/class solution ;
vector
ret;
treenode* read = root;
treenode* top;
treenode* tmp = null; // 記錄上次訪問過的節點
std::stack
sk;while(read != null || !sk.empty())
else
else }}
return ret;
}};
二叉樹遍歷(前序,中序,後序
二叉樹的遍歷有三種方式,如下 1 前序遍歷 dlr 首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。簡記根 左 右。2 中序遍歷 ldr 首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。簡記左 根 右。3 後序遍歷 lrd 首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點。簡記左 右 根。例1 如上圖...
二叉樹的遍歷 前序 中序 後序
include includetypedef struct bintree treenode,b tree b tree root null 函式的宣告 b tree creat tree int n void print1 void preorder b tree pointer 前序遍歷 voi...
二叉樹的前序 中序 後序遍歷
樹形結構是一類重要的非線性資料結構,其中以樹和二叉樹最為常用。二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹 不存在度大於2的結點 ...